与Servlet一起使用Socket.IO

我正在考虑通过WebSocket(我目前使用)在我的项目中使用Socket.IO。 我还没有使用Node.js。 当我试图通过Socket.IO,我得到了Node.js是必须实现这一点的想法。 我有几个问题要问。

  1. 是否类似于WebSocket
  2. 我可以使用没有Node.js的Socket.IO
  3. 我在哪里可以学习使用Servlet的Socket.IO
  4. 我是否需要添加单独的库文件来处理Servlet中的Socket.IO(我正在使用Java 8)。 如果是的话,哪一个是正确的。

我正在使用Glass-fish Server。 在我的项目中只使用了hibernate,没有其他的框架被使用,我不熟悉任何其他框架。

我经历了以前在这里问过的这个问题,但我不明白如何使用这个 。 请帮忙

1)是的。 它类似于纯websocket。 但是netty-socketio:

哪里

  • 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序列化/反序列化。 就这样。