두 가지 일반적인 기술이 여기에 초간편 chatroom 개념으로 소개되었습니다.
옵션 # 1 : 중앙 위치에 상태를 다시보고 WebSocket을 가지고
@WebSocket
public class ChatSocket {
public Session session;
@OnWebSocketConnect
public void onConnect(Session session) {
this.session = session;
ChatRoom.getInstance().join(this);
}
@OnWebSocketMessage
public void onText(String message) {
ChatRoom.getInstance().writeAllMembers("Hello all");
}
@OnWebSocketClose
public void onClose(int statusCode, String reason) {
ChatRoom.getInstance().part(this);
}
}
public class ChatRoom {
private static final ChatRoom INSTANCE = new ChatRoom();
public static ChatRoom getInstance()
{
return INSTANCE;
}
private List<ChatSocket> members = new ArrayList<>();
public void join(ChatSocket socket)
{
members.add(socket);
}
public void part(ChatSocket socket)
{
members.remove(socket);
}
public void writeAllMembers(String message)
{
for(ChatSocket member: members)
{
member.session.getRemote().sendStringByFuture(message);
}
}
public void writeSpecificMember(String memberName, String message)
{
ChatSocket member = findMemberByName(memberName);
member.session.getRemote().sendStringByFuture(message);
}
public ChatSocket findMemberByName(String memberName)
{
// left as exercise to reader
}
}
그리고 단순히 당신의 선택의 WebSocket을 얘기 중앙 위치를 사용합니다.
ChatRoom.getInstance().writeSpecificMember("alex", "Hello");
// or
ChatRoom.getInstance().writeAllMembers("Hello all");
옵션 # 2 : 당신이 당신의 선택의 WebSocket을 얘기 위와 같은 기술을 사용할 수 있습니다이 시점에서 WebSocketCreator
@WebSocket
public class ChatSocket {
public ChatRoom chatroom;
public ChatSocket(ChatRoom chatroom)
{
this.chatroom = chatroom;
}
@OnWebSocketConnect
public void onConnect(Session session) {
chatroom.join(this);
}
@OnWebSocketMessage
public void onText(String message) {
chatroom.writeAllMembers(message);
}
@OnWebSocketClose
public void onClose(int statusCode, String reason) {
chatroom.part(this);
}
}
public class ChatCreator implements WebSocketCreator
{
private ChatRoom chatroom;
public ChatCreator(ChatRoom chatroom)
{
this.chatroom = chatroom;
}
public Object createWebSocket(UpgradeRequest request,
UpgradeResponse response)
{
// We want to create the Chat Socket and associate
// it with our chatroom implementation
return new ChatSocket(chatroom);
}
}
public class ChatHandler extends WebSocketHandler
{
private ChatRoom chatroom = new ChatRoom();
@Override
public void configure(WebSocketServletFactory factory)
{
factory.setCreator(new ChatCreator(chatroom));
}
}
수동으로 웹 소켓을 생성하게한다.
정확히 서버가 아닙니다. 누군가에게 응답 (봉사)하지 않는 한, 당신이 누구에게 연결되어 있는지 모르기 때문에 그 시점부터 보내기 시작할 수는 없습니다. –
WebSockets를 사용하는 이유는 서버 측에서 밀어 넣기를 원하는 상황에서 좋은 선택이라고 생각하기 때문입니다. MyEchoSocket은 onConnect() 메서드를 통해 자체 WebSocketConnections를 추적 할 수 있습니다. 일단 프로그램이 실행되면 MyEchoSocket의 인스턴스에 액세스하는 방법을 모르겠습니다. –
누구를 밀어 붙이려고합니까? 만약 누군가가 당신에게 연결되어 있다면, 아마도 비동기 처리기를 생성하여 푸싱을해야 할 것입니다. –