Node.js 将Socket.IO与Servlet一起使用

Node.js 将Socket.IO与Servlet一起使用,node.js,servlets,socket.io,Node.js,Servlets,Socket.io,我正在考虑在我的项目中使用Socket.IO而不是WebSocket(我目前正在使用)。我还没有使用Node.js。当我尝试使用Socket.IO时,我想到Node.js是实现这一点的必要工具。我有几个问题要问 它类似于WebSocket吗 我可以在没有Node.js的情况下使用Socket.IO吗 在哪里可以学习将Socket.IO与servlet一起使用 我是否需要添加单独的库文件来使用servlet中的Socket.IO(我使用的是Java 8)。如果是,哪一个是正确的 我使用的是玻璃鱼服

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

  • 它类似于WebSocket吗
  • 我可以在没有Node.js的情况下使用Socket.IO吗
  • 在哪里可以学习将Socket.IO与servlet一起使用
  • 我是否需要添加单独的库文件来使用servlet中的Socket.IO(我使用的是Java 8)。如果是,哪一个是正确的
  • 我使用的是玻璃鱼服务器。我的项目中只使用了hibernate,没有使用其他框架,我对其他框架也不熟悉

    以前我问过这个问题,但我不知道如何使用。请帮忙,好的。它类似于纯websocket。但内蒂·索克蒂奥:

    • 使用socketio协议

    • 支持内存/Hazelcast/Redisson存储,用于存储开箱即用的会话

    • 支持长轮询和闪存的优雅降级
    • 基于事件模型。您必须将数据作为数据发送到套接字

      42[“eventName”,您的\u数据\u对象]

    在哪里

    • 4-消息的包类型
    • 2-事件的内部类型
    • eventName—事件的名称,在Java
      @OneEvent
      处理程序中必须相同(见下文)
    您可以按照自己的意愿组织\u数据\u对象,例如,编写类似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

    (需要传输设置)

    • 需要发送乒乓球数据包
    • 二平,
    • 3-乒乓球
    在客户机和服务器之间,或者在服务器配置中禁用它(不推荐,这对于死机会话很有用)

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

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

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

    server.addListeners(new Controller()); 
    
    3) 可悲的是,关于netty socket io的信息很少,当您遇到麻烦时,您可以尝试它并创建新的问题

    4) 您需要将netty套接字io添加到依赖项中。 Hazelcast或Redisson,如果您打算使用它们存储会话和房间订阅。Jackson用于json序列化/反序列化。就这些。是的。它类似于纯websocket。但内蒂·索克蒂奥:

    • 使用socketio协议

    • 支持内存/Hazelcast/Redisson存储,用于存储开箱即用的会话

    • 支持长轮询和闪存的优雅降级
    • 基于事件模型。您必须将数据作为数据发送到套接字

      42[“eventName”,您的\u数据\u对象]

    在哪里

    • 4-消息的包类型
    • 2-事件的内部类型
    • eventName—事件的名称,在Java
      @OneEvent
      处理程序中必须相同(见下文)
    您可以按照自己的意愿组织\u数据\u对象,例如,编写类似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

    (需要传输设置)

    • 需要发送乒乓球数据包
    • 二平,
    • 3-乒乓球
    在客户机和服务器之间,或者在服务器配置中禁用它(不推荐,这对于死机会话很有用)

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

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

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

    server.addListeners(new Controller()); 
    
    3) 可悲的是,关于netty socket io的信息很少,当您遇到麻烦时,您可以尝试它并创建新的问题

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