Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js是否有不需要使用浏览器的无浏览器websocket客户端?_Node.js_Websocket - Fatal编程技术网

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

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)编写了

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

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

编辑


回应您的评论:不要忘记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进程之间通信,这似乎符合要求。