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

hai*_*jin 12 websocket node.js

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

col*_*ock 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"是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);
}
Run Code Online (Sandbox Code Playgroud)

SockJS

仅供参考,马立克Majkowski的SockJS并没有包括节点客户端.SockJS的客户端库只是一个浏览器dom包装器.

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


Mic*_*nry 6

刚刚完成这个,我不得不建议:https: //github.com/Worlize/WebSocket-Node 由于它的优秀文档.

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

两者都是活跃的,并且此时保持最新.


Ada*_*and 0

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

编辑

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