将Socket.IO与Servlet一起使用

san*_*nal 1 servlets node.js socket.io

我正在考虑在我的项目中使用Socket.IO而不是WebSocket(我目前正在使用它).我还没有使用过Node.js. 当我试图通过Socket.IO时,我认为Node.js是必须实现的.我有几个问题要问.

  1. 它与WebSocket类似吗?
  2. 我可以在没有Node.js的情况下使用Socket.IO
  3. 我在哪里可以学习使用Socket.IO和Servlet
  4. 我是否需要添加单独的库文件以与Servlet中的Socket.IO一起使用(我使用的是Java 8).如果是,哪个是正确的.

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

我通过这个问题以前问走到这里,但我不知道如何使用这个.请帮忙

Iva*_*van 6

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

哪里

  • 4 - 消息的包类型;
  • 2 - 事件的内在类型;
  • 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]]
Run Code Online (Sandbox Code Playgroud)

等等.

  • 需要通过http连接到

    WS://host/socket.io/运输=的WebSocket

(需要运输设置);

  • 需要发送乒乓包
  • 2 - PING,
  • 3 - PONG

您的客户端和服务器之间或在服务器的配置中禁用它(不推荐,它对死会话很有用).

  • 支持握手阶段易于写入授权;

  • 支持房间.您可以加入/离开房间(基于Hazelcast/Redisson的pub/sub)并仅为这些房间发送广播活动;

  • 支持确认回调(可以禁用);

总之,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"}');
}
Run Code Online (Sandbox Code Playgroud)

Java的:

public class Controller {

    @OnEvent("doSomething")
    public void doSomething(SocketIOClient client, Headers headers, Something something) {
        client.sendEvent("doSomethingSuccess", null, responseHeaders, responseObject);
    }
}
Run Code Online (Sandbox Code Playgroud)

并在配置中路由到控制器:

server.addListeners(new Controller()); 
Run Code Online (Sandbox Code Playgroud)

3)遗憾的是,关于netty-socket-io的信息很少,你可以尝试它并在遇到麻烦时创建新的问题;

4)您需要将netty-socket-io添加到依赖项中.Hazelcast或Redisson如果您打算使用它们存储会话和订阅房间.杰克逊为json序列化/反序列化.就这样.