【问题标题】:Is there a browserless websocket client for Node.js that does not need to use a browser?是否有不需要使用浏览器的 Node.js 无浏览器 websocket 客户端?
【发布时间】:2011-04-20 01:04:49
【问题描述】:

Socket.IO等都需要在客户端使用浏览器......只是想知道,我们如何才能拥有node.js的无浏览器websocket客户端?

【问题讨论】:

    标签: node.js websocket


    【解决方案1】:

    Node.js 服务器绝不会作为客户端绑定到 Web 浏览器。任何程序都可以使用其支持库提供的任何套接字库来调用 Node.js 服务器。

    编辑

    回复您的评论:不要忘记 Node.js 是 Javascript!如果您想定期执行代码——与守护进程可能的方式大致相同——您可以使用 setIntervaln 毫秒运行一次回调。您应该可以在您的节点程序中执行此操作。

    【讨论】:

    • 是的,我有 node.js 服务器正在运行....我只是希望能够通过 websocket 在我的客户端上获得实时更新,而无需在客户端使用浏览器....基本上,我想让一个客户端守护进程监听来自我的node.js服务器的实时推送消息......我也在客户端使用节点......但是,我不确定如何让节点进程成为一个守护进程...... ..node 是非阻塞的....虽然我现在要求客户端阻塞(在 sock.onmessage 上循环)。
    • @haijin:在我的回答中回复了你的评论
    • 我发现 websock python 库对我的情况很好。很好。 freeasinbeard.org/post/1008785379/…
    • 是的,我使用 setInterval 打印出收到的 msg。但是,在我的主 node.js 程序运行并退出后,回调不再起作用。此外,周期性回调更像是轮询,而不是推送解决方案,这违背了基于推送解决方案的目的。
    【解决方案2】:

    Remy Sharp (@rem) 编写了一个在服务器上工作的 Socket.io-client 实现。我想这就是你要找的东西:https://github.com/remy/Socket.io-node-client

    【讨论】:

    • Socket.io-node-client 不是“无浏览器的 websocket”实现,它是一个支持“无浏览器 socket.io”客户端通信的 shim。他特别要求“无浏览器websocket”。 Socket.io-node-client 使用 socket.io client-test WebSocket 实现,仅支持旧的 WebSocket hixie Draft 75/76;它(当前)不模拟现代浏览器现在使用的 WebSocket 对象,因此它不适合用作一般的“无浏览器 websocket”实现。 Socket.io-node-client 和 socket.io 的客户端测试 WebSocket 都不是正确的选择。
    • 我不关心“browserless websocket”与“browserless socket.io”的细微差别,我只想要一种在两个node.js进程之间进行通信的简单方法,这似乎很合适账单。
    【解决方案3】:

    当前推荐

    将 WebSocket-Node 与我的包装代码一起使用(见下文)。在撰写本文时,我知道没有其他公共项目支持新的 hybi 规范,所以如果你想模拟当前的浏览器版本,你需要 WebSocket-Node。如果您想模拟较旧的浏览器,例如 iOS 4.2 上的移动 Safari,您还需要下面列出的其他库之一,但您必须自己管理“WebSocket”对象名称冲突。

    node.js 的公共 WebSocket 客户端实现列表如下。

    Socket.IO

    socket.io 客户端测试 WebSocket 实现执行 hixie 草案 75/76,但在撰写本文时,不是 hybi 7+。

    https://github.com/LearnBoost/socket.io/blob/master/support/node-websocket-client/lib/websocket.js

    我在问他们是否打算更新到 hybi 7+: http://groups.google.com/group/socket_io/browse_thread/thread/d27320502109d0be

    Node-Websocket-Client

    Peter Griess 的“node-websocket-client”做了 hixie 草案 75/76,但在撰写本文时,不是 hybi 7+。

    https://github.com/pgriess/node-websocket-client/blob/master/lib/websocket.js

    WebSocket 节点

    Brian McKelvey 的 WebSocket-Node 有一个 hybi 7-17(协议版本 7-13)的客户端实现,但该实现不提供浏览器样式的 WebSocket 对象。

    https://github.com/Worlize/WebSocket-Node

    这是我用来模拟浏览器风格的 WebSocket 对象的包装代码:

    /**
     * Wrapper for Worlize WebSocketNode to emulate the browser WebSocket object.
     */
    var WebSocketClient = require('./WorlizeWebSocketNode/lib/websocket').client;
    
    exports.WebSocket = function (uri) {
      var self = this;
      this.connection = null;
      this.socket = new WebSocketClient();
      this.socket.on('connect', function (connection) {
        self.connection = connection;
    
        connection.on('error', function (error) {
          self.onerror();
        });
    
        connection.on('close', function () {
          self.onclose();
        });
    
        connection.on('message', function (message) {
          if (message.type === 'utf8') {
            self.onmessage({data:message.utf8Data});
          }
        });
    
        self.onopen();
      });
      this.socket.connect(uri);
    }
    
    exports.WebSocket.prototype.send = function (data) {
      this.connection.sendUTF(data);
    }
    

    SockJS

    仅供参考,Marek Majkowski 的 SockJS 确实包含节点客户端。 SockJS 的客户端库只是一个浏览器 dom 包装器。

    https://github.com/sockjs/sockjs-client

    【讨论】:

      【解决方案4】:

      刚刚经历了这个,我不得不推荐: https://github.com/Worlize/WebSocket-Node 由于它的文档非常好。

      https://github.com/einaros/ws 紧随其后。

      目前两者都处于活动状态并保持最新状态。

      【讨论】:

        【解决方案5】:

        目前(2012 年 10 月)推荐的方法是使用 socket.io-client 库,该库位于 https://github.com/LearnBoost/socket.io-client

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-10
          • 2011-10-08
          • 1970-01-01
          相关资源
          最近更新 更多