diff --git a/net.html b/net.html index f3536cbc7..c4411b67d 100644 --- a/net.html +++ b/net.html @@ -163,6 +163,56 @@ <servlets path="/pipes" autoload="true"/> </server>

        如上, 配置了/pipes 前缀后,客户端发送Servlet请求需带上前缀,请求当前用户信息的url就变成:/pipes/user/myinfo 。

+
@WebServlet("/ws/chat")
+public class ChatWebSocketServlet extends WebSocketServlet {
+
+    @Resource //[RedKale内置资源]
+    protected JsonConvert jsonConvert;
+
+    @Resource
+    private UserService userService;
+
+    @Override
+    protected WebSocket createWebSocket() {
+
+        return new WebSocket() {
+
+            private UserInfo user;
+
+            @Override
+            public void onMessage(String text) { // text 接收的格式:  {"receiveid":200000001, "content":"Hi Redkale!"}
+                final ChatMessage message = jsonConvert.convertFrom(ChatMessage.class, text); //获取给对方的消息体信息
+                message.sendid = user.getUserid(); //将当前用户设为消息的发送方
+                message.sendtime = System.currentTimeMillis(); //设置消息发送时间
+                //给接收方发送消息, 即使接收方在其他WebSocket进程节点上有链接,RedKale也会自动发送到其他链接进程节点上。
+                super.sendEachMessage(message.receiveid, jsonConvert.convertTo(message)); 
+            }
+
+            @Override
+            protected Serializable createGroupid() { //以用户ID作为WebSocketGroup的groupid
+                this.user = userService.current(String.valueOf(super.getSessionid()));
+                return this.user == null ? null : this.user.getUserid();
+            }
+
+            @Override
+            public Serializable onOpen(HttpRequest request) {
+                return request.getSessionid(false); //以request中的sessionid字符串作为WebSocket的sessionid
+            }
+
+        };
+    }
+
+    public static class ChatMessage {
+
+        public int sendid; //发送方用户ID
+
+        public int receiveid; //接收方用户ID        
+
+        public String content; //文本消息内容
+
+        public long sendtime;  //消息发送时间
+    }
+}

  . HttpRequest 对象

public class HttpRequest {