与Servlet一起使用Socket.IO
我正在考虑通过WebSocket(我目前使用)在我的项目中使用Socket.IO。 我还没有使用Node.js。 当我试图通过Socket.IO,我得到了Node.js是必须实现这一点的想法。 我有几个问题要问。
- 是否类似于WebSocket
- 我可以使用没有Node.js的Socket.IO
- 我在哪里可以学习使用Servlet的Socket.IO
- 我是否需要添加单独的库文件来处理Servlet中的Socket.IO(我正在使用Java 8)。 如果是的话,哪一个是正确的。
我正在使用Glass-fish Server。 在我的项目中只使用了hibernate,没有其他的框架被使用,我不熟悉任何其他框架。
我经历了以前在这里问过的这个问题,但我不明白如何使用这个 。 请帮忙
1)是的。 它类似于纯websocket。 但是netty-socketio:
-
使用socket-io协议;
-
支持内存/ Hazelcast / Redisson存储开箱即用的存储会话;
- 支持长轮询和闪存的优雅降级;
-
基于事件模型。 您必须将数据发送到套接字
42 [“eventName”,your_data_objects]
哪里
- 4 – 消息的分组types;
- 2 – 事件的内在types;
- eventName – 您的事件的名称,它必须在Java
@OnEvent
处理程序中相同(请参见下文)。
您可以按照自己的意愿组织your_data_objects,例如,写一些类似于HTTP的东西:
42["eventName", {headers map}, data(primitive, array or object)] 42["createUser", {"requestId": "UUID"}, { "firstName": "John", "lastName": "Dow" }] 42["deleteUser", {}, 10] 42["getUsers", {}, [1,2,3,4,5]]
等等。
-
需要通过http连接
WS://host/socket.io/运输=的WebSocket
(运输设置是必需的);
- 要求发送乒乓包
- 2 – PING,
- 3 – PONG
在你的客户端和服务器之间,或者在服务器的configuration中禁用它(不推荐,这对于死亡会话是有用的)。
-
支持在握手阶段轻松写授权;
-
支持房间。 您可以join/离开房间(根据Hazelcast / Redisson中的酒吧/小食),并只发送这些房间的广播事件;
-
支持确认callback(可以禁用);
总之,netty-socket-io是非常有用,稳定的仪器,可用于生产。
2)绝对。 你可以在你的Java后端使用netty-socket-io。 和客户端上的socket-io库。 甚至是一个纯粹的websocket:
var ws = new Websocket("ws://localhost:9060/socket.io/?transport=websocket"); setInterval(function(){ sendHeartbeat(); }, 5000); function sendHeartbeat() { ws.send("2"); } ws.onopen = function() { ws.send('42["doSomething", {"header1": "value1"}, {"key1": "value1"}'); }
Java的:
public class Controller { @OnEvent("doSomething") public void doSomething(SocketIOClient client, Headers headers, Something something) { client.sendEvent("doSomethingSuccess", null, responseHeaders, responseObject); } }
并在configuration路由到控制器:
server.addListeners(new Controller());
3)可惜的是,关于netty-socket-io的信息很less,你可以尝试一下,在遇到麻烦的时候创build新的问题。
4)你需要添加netty-socket-io到你的依赖关系。 Hazelcast或Redisson,如果您打算使用它们来存储会话和订阅房间。 jacksonJSON序列化/反序列化。 就这样。