小例子说明
不是所有的Client都是前端页面,服务器也可能发起一个WebSocket连接,向其他服务器请求某项服务。小例子模拟两个WebSocket客户端,向server建立连接,当server收到消息时,向所有的连接的client分发该消息,当某个client连接或者关闭连接时,向其他client发布状态变化消息。
为了方便测试,client和server都在同一个web app中,要求client启动连接和发送消息,使用servlet进行触发。
二进制的消息
二进制消息需要进行序列化。在Java中对象序列化比JSON要高效,但是与非Java的程序互动,流行JSON。
public class ClusterMessage implements Serializable{ private static final long serialVersionUID = 1L; private String nodeId; private String message; public ClusterMessage(){ } public ClusterMessage(String nodeId , String message){ this.nodeId = nodeId; this.message = message; } public String getNodeId() { return nodeId; } public void setNodeId(String nodeId) { this.nodeId = nodeId; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
Cluster Server代码
我们重点学习如何解析二进制消息,如何发送二进制消息。
@ServerEndpoint("/clusterNodeSocket/{nodeId}")public class ClusterNodeServerEndpoint { //存储所有的client,以便进行消息广播 private static