是否有Node.js的无浏览器websocket客户端,不需要使用浏览器?

时间:2010-10-01 19:51:02

标签: node.js websocket

Socket.IO等都需要在客户端使用浏览器....只是想知道,我们怎样才能为node.js提供无浏览器的websocket客户端?

5 个答案:

答案 0 :(得分:9)

当前推荐

将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

<强>节点的WebSocket客户端

Peter Griess的“node-websocket-client”执行了75/76的hixie草案,但在撰写本文时,并非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

答案 1 :(得分:6)

刚刚经历过这个,我不得不建议: https://github.com/Worlize/WebSocket-Node 由于它是出色的文档。

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

此时两者都处于活动状态并保持更新。

答案 2 :(得分:4)

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

答案 3 :(得分:0)

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

修改

回应你的评论:不要忘记Node.js是Javascript!如果您想定期执行代码 - 与守护进程可能的方式非常相似 - 您可以使用 setInterval 每隔 n 毫秒运行一次回调。您应该可以在节点程序中直接执行此操作。

答案 4 :(得分:0)

现在(2012年10月)推荐的方法是使用socket.io-client库,https://github.com/LearnBoost/socket.io-client