Можно ли запустить клиент socket.io(серверный) на сервере node.js?
Я бы хотел включить сокет-p2p-связь между двумя или более разными серверами приложений node.js. Я использую socket.io для обработки всей такой связи между данным сервером и используемым им веб-приложением, но то, что я ищу, - это способ связи между серверами.
Я изначально предполагал, что это будет так же просто, как что-то вроде этого:
var io = require("socket.io");
var socket = io.connect("my remote endpoint");
Однако, как оказалось, серверная реализация socket.io не предлагает метод "connect", а только метод прослушивания.
Почему это? Почему я не могу обработать сервер приложений node в качестве клиента на сервере socket.io, работающем в другом месте? Есть ли способ достичь этой функциональности?
Ответы
Ответ 1
ОК, поэтому благодаря @pimvdb в комментариях выше у меня есть работоспособное решение.
В принципе, библиотека socket.io, которую устанавливает npm, имеет зависимость от другого модуля, называемого socket.io-client. В стандартной установке socket.io это будет установлено в node_modules/socket.io/node_modules/socket.io-client
Однако также можно сказать "npm install socket.io-client" и установить его как свою собственную первоклассную библиотеку граждан.
Тогда ваше использование выглядит следующим образом:
var client = require("socket.io-client");
client.connect("http://myendpoint.com:3000/whatever");
client.emit("test", "foo");
И все работает.
Итак, спасибо человеку!
Ответ 2
Просто для пояснения, это пример с слушателями и возможность испускать события (и без установки снова установленного модуля)
var io = require('socket.io/node_modules/socket.io-client');
client = io.connect('http://'+CONFIG.host+':'+CONFIG.port);
client.on('connect',function() {
client.emit("test","foo");
});
Ответ 3
Перед тем, как перейти на полную совместимость с socket.io для связи между серверами...
socket.io спроектирован как браузер для коммуникационной инфраструктуры сервера. Я далеко не уверен, что это лучшее решение для сервера P2P. Кроме того, если вы выполняете сервер-сервер - почему бы просто не использовать веб-узлы? Существуют различные модули websocket для node - например. https://github.com/einaros/ws