node.js - 将 Socket.IO 与 Servlet 结合使用

标签 node.js servlets socket.io

我正在考虑在我的项目中通过 WebSocket(我当前正在使用)使用 Socket.IO。我还没有使用过 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 服务器。我的项目中只使用了hibernate,没有使用其他框架,其他的我也不熟悉。

我回答了之前提出的这个问题 here ,但我不明白如何使用 this 。请帮忙

最佳答案

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]]

等等

  • 需要通过 http 连接

    ws://host/socket.io/?transport=websocket

(需要传输设置);

  • 需要发送乒乓数据包
  • 2 - PING,
  • 3 - 乒乓球

在客户端和服务器之间或在服务器配置中禁用它(不推荐,这对于死 session 很有用)。

  • 支持握手阶段轻松编写授权;

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

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

总而言之,netty-socket-io是非常有用、稳定的工具,可以在生产中使用。

2)当然。您可以在 Java 后端使用 netty-socket-io。以及客户端的套接字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);
    }
}

并在配置中路由到 Controller :

server.addListeners(new Controller()); 

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

4) 您需要将 netty-socket-io 添加到您的依赖项中。 Hazelcast 或 Redisson(如果您打算使用它们来存储 session 和房间订阅)。 Jackson 用于 json 序列化/反序列化。仅此而已。

关于node.js - 将 Socket.IO 与 Servlet 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35673673/

相关文章:

node.js - NodeJS Socket.io Server<-->服务器通信

node.js - Socket.io、Redis Store 和 IE

java - 显示标签问题

javascript - Node.js 套接字 session

javascript - Socket.io - 客户端断开连接后手动重新连接

java - JSP Servlet 上传图像文件

Node.js VS。用于简单客户端应用程序的 JavaFX(从服务器打印出消息)

node.js - Upstart 和 node.js 应用程序 "stop: Unknown instance:"

javascript - 将正则表达式存储在集合对象中?

java - 请求 URL 中的括号合法但在 URI 中不合法(Java)?