Существует ли веб-сокет-клиент без браузера для Node.js, которому не нужно использовать браузер? - PullRequest
12 голосов
/ 01 октября 2010

Socket.IO и т. Д. Все требуют использования браузера на стороне клиента ... просто интересно, как у нас может быть клиент websocket без браузера для node.js?

Ответы [ 5 ]

9 голосов
/ 08 ноября 2011

Текущая рекомендация

Используйте WebSocket-Node с моим кодом оболочки (см. Ниже).На момент написания этой статьи ни один другой общедоступный проект, о котором я знаю, не поддерживает новую спецификацию Hybi, поэтому, если вы хотите эмулировать текущие выпуски браузера, вам потребуется WebSocket-Node.Если вы хотите эмулировать старые браузеры, такие как мобильный Safari на iOS 4.2, вам также понадобится одна из других библиотек, перечисленных ниже, но вам придется самостоятельно управлять конфликтами имен объектов «WebSocket».

Ниже приведен список общедоступных реализаций клиента WebSocket для node.js.

Socket.IO

Реализация WebSocket-теста socket.io client-test делаетчерновик проекта 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

"node-websocket-client" Питера Грисса делает хайси черновик 75/76, но на момент написания этой статьи не hybi 7+.

https://github.com/pgriess/node-websocket-client/blob/master/lib/websocket.js

WebSocket-Node

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

Просто для справки, SockJS Марека Майковского не включает клиент узла.Клиентская библиотека SockJS - это просто оболочка для браузера.

https://github.com/sockjs/sockjs-client

6 голосов
/ 11 января 2012

Только что пройдя через это, я должен порекомендовать: https://github.com/Worlize/WebSocket-Node Из-за отличной документации.

https://github.com/einaros/ws приближается ко второй.

Обав настоящее время активны и обновляются.

4 голосов
/ 19 ноября 2010

Реми Шарп (@rem) написал реализацию клиента Socket.io, которая работает на сервере.Я думаю, это то, что вы ищете: https://github.com/remy/Socket.io-node-client

0 голосов
/ 15 октября 2012

Прямо сейчас (в октябре 2012 г.) рекомендуемый способ сделать это - использовать библиотеку socket.io-client, которая доступна по адресу https://github.com/LearnBoost/socket.io-client

0 голосов
/ 01 октября 2010

Сервер Node.js никоим образом не связан с веб-браузером в качестве клиента.Любая программа может использовать любую библиотеку сокетов, предоставляемую ее вспомогательными библиотеками, для вызова сервера Node.js.

EDIT

Отвечая на ваш комментарий: не забывайте, что Node.jsтакое Javascript!Если вы хотите выполнять код периодически - во многом так же, как это может сделать демон-процесс - вы можете использовать setInterval для запуска обратного вызова каждые n миллисекунд.Вы должны быть в состоянии сделать это прямо в вашей программе узла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...