【发布时间】:2011-04-20 01:04:49
【问题描述】:
Socket.IO等都需要在客户端使用浏览器......只是想知道,我们如何才能拥有node.js的无浏览器websocket客户端?
【问题讨论】:
Socket.IO等都需要在客户端使用浏览器......只是想知道,我们如何才能拥有node.js的无浏览器websocket客户端?
【问题讨论】:
Node.js 服务器绝不会作为客户端绑定到 Web 浏览器。任何程序都可以使用其支持库提供的任何套接字库来调用 Node.js 服务器。
编辑
回复您的评论:不要忘记 Node.js 是 Javascript!如果您想定期执行代码——与守护进程可能的方式大致相同——您可以使用 setInterval 每 n 毫秒运行一次回调。您应该可以在您的节点程序中执行此操作。
【讨论】:
Remy Sharp (@rem) 编写了一个在服务器上工作的 Socket.io-client 实现。我想这就是你要找的东西:https://github.com/remy/Socket.io-node-client
【讨论】:
当前推荐
将 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/Worlize/WebSocket-Node 由于它的文档非常好。
https://github.com/einaros/ws 紧随其后。
目前两者都处于活动状态并保持最新状态。
【讨论】:
目前(2012 年 10 月)推荐的方法是使用 socket.io-client 库,该库位于 https://github.com/LearnBoost/socket.io-client
【讨论】: