hai*_*jin 12 websocket node.js
Socket.IO等都需要在客户端使用浏览器....只是想知道,我们怎样才能为node.js提供无浏览器的websocket客户端?
目前的建议
将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
刚刚完成这个,我不得不建议:https: //github.com/Worlize/WebSocket-Node 由于它的优秀文档.
https://github.com/einaros/ws紧随其后.
两者都是活跃的,并且此时保持最新.
Node.js 服务器绝不作为客户端绑定到 Web 浏览器。任何程序都可以使用其支持库提供的任何套接字库来调用 Node.js 服务器。
编辑
回复您的评论:不要忘记 Node.js 是 Javascript!如果您想定期执行代码(与守护进程的方式大致相同),您可以使用setInterval每n毫秒运行一次回调。您应该能够在您的节点程序中完成此操作。
归档时间: |
|
查看次数: |
6516 次 |
最近记录: |