【问题标题】:Use Socket.IO with Servlet将 Socket.IO 与 Servlet 一起使用
【发布时间】:2016-02-27 18:27:15
【问题描述】:

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

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

我正在使用 Glass-fish 服务器。我的项目只使用了hibernate,没有使用其他框架,其他的我都不熟悉。

我曾经问过这个问题 here ,但我不明白如何使用 this 。请帮忙

【问题讨论】:

    标签: node.js servlets socket.io


    【解决方案1】:

    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 - 平,
    • 3 - 乒乓

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

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

    • 支持房间。您可以加入/离开房间(基于 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"}');
    }
    

    Java:

    public class Controller {
    
        @OnEvent("doSomething")
        public void doSomething(SocketIOClient client, Headers headers, Something something) {
            client.sendEvent("doSomethingSuccess", null, responseHeaders, responseObject);
        }
    }
    

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

    server.addListeners(new Controller()); 
    

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

    4) 您需要将 netty-socket-io 添加到您的依赖项中。 Hazelcast 或 Redisson,如果您打算使用它们来存储会话和房间订阅。 Jackson 用于 json 序列化/反序列化。就是这样。

    【讨论】:

      猜你喜欢
      • 2017-01-24
      • 2017-08-23
      • 2011-09-17
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 2012-01-13
      • 2015-09-28
      相关资源
      最近更新 更多