Node.js是否有不需要使用浏览器的无浏览器websocket客户端?
Socket.IO等都需要在客户端使用浏览器……只是想知道,我们怎么能让node.js使用无浏览器的websocket客户端?node.js服务器作为客户端不绑定到web浏览器。任何程序都可以使用其支持库提供的任何套接字库来调用Node.js服务器 编辑Node.js是否有不需要使用浏览器的无浏览器websocket客户端?,node.js,websocket,Node.js,Websocket,Socket.IO等都需要在客户端使用浏览器……只是想知道,我们怎么能让node.js使用无浏览器的websocket客户端?node.js服务器作为客户端不绑定到web浏览器。任何程序都可以使用其支持库提供的任何套接字库来调用Node.js服务器 编辑 回应您的评论:不要忘记Node.js是Javascript!如果您想周期性地执行代码(与守护进程的执行方式大致相同),可以使用setInterval每n毫秒运行一次回调。您应该能够在节点程序中完成这项工作。Remy Sharp(@rem)编写了
回应您的评论:不要忘记Node.js是Javascript!如果您想周期性地执行代码(与守护进程的执行方式大致相同),可以使用setInterval每n毫秒运行一次回调。您应该能够在节点程序中完成这项工作。Remy Sharp(@rem)编写了一个Socket.io-client实现,可以在服务器上运行。我想这就是你想要的:当前推荐 将WebSocket节点与我的包装器代码一起使用(见下文)。在撰写本文时,据我所知,没有其他公共项目支持新的hybi规范,因此,如果您想要模拟当前的浏览器版本,则需要WebSocket节点。如果您想模拟较旧的浏览器,例如iOS 4.2上的mobile Safari,您还需要下面列出的其他库之一,但您必须自己管理“WebSocket”对象名称冲突 下面列出了node.js的公共WebSocket客户端实现 Socket.IO io客户机测试WebSocket实现不支持hixie草案75/76,但在撰写本文时,还没有支持Hybi7+ 我是问他们是否打算升级到hybi 7+: 节点Websocket客户端 Peter Griess的“节点websocket客户端”不支持hixie草案75/76,但在撰写本文时,不是hybi 7+ WebSocket节点 Brian McKelvey的WebSocket节点有一个适用于hybi 7-17(协议版本7-13)的客户端实现,但该实现不提供浏览器样式的WebSocket对象 以下是我用来模拟浏览器样式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包装器
刚刚讲完这一点,我不得不推荐: 由于它的优秀文档 就差一秒了
现在(2012年10月),建议使用socket.io-client库中的,我的node.js服务器正在运行…我只想通过websocket在客户端获得实时更新,而不必在客户端使用浏览器…基本上,我想让客户端守护进程监听来自node.js服务器的实时推送消息。。。我也在客户端使用node…但是,我不知道如何使node进程成为deamon…node是非阻塞的…而我现在要求客户端进行阻塞(同时在sock.onmessage上循环)。@haijin:在我的回答中回应了你的评论我发现websock python库对我的情况很好..很好。是的,我使用setInterval打印收到的消息。但是,在我的main node.js程序运行完毕并退出后,回调不再工作。此外,定期回调更像是轮询,而不是推送解决方案,这违背了基于推送的解决方案的目的。Socket.io-node-client不是一个“无浏览器websocket”实现,它是一个支持“无浏览器Socket.io”客户端通信的垫片。他特别要求提供“无浏览器websocket”。Socket.io-node-client使用Socket.io客户端测试WebSocket实现,它只支持旧的WebSocket hixie草案75/76;它(目前)不模拟现代浏览器正在使用的WebSocket对象,因此不适合用作一般的“无浏览器WebSocket”实现。无论是Socket.io-node-client还是Socket.io的客户端测试WebSocket都不是正确的选择。我不在乎“无浏览器WebSocket”与“无浏览器Socket.io”之间的细微差别,我只想要一种非常简单的方式在两个node.js进程之间通信,这似乎符合要求。