这里以超级简化的聊天室概念介绍了两种常用技术。
选项#1:让WebSocket将其状态报告回中央位置
@WebSocketpublic 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");// orChatRoom.getInstance().writeAllMembers("Hello all");选项2:使用WebSocketCreator手动创建WebSocket
@WebSocketpublic 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)); }}此时,您可以使用与上述相同的技术来与您选择的websocket通信。



