Socket.IO等都需要在客户端使用浏览器....只是想知道,我们怎样才能为node.js提供无浏览器的websocket客户端?
答案 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包装器。
答案 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