2015-10-17 2 views
14

В настоящее время я работаю с Socket.IO fro nodejs для обмена информацией в реальном времени между сервером и некоторыми клиентами. Клиенты должны общаться только с сервером, а не друг с другом.Socket.IO без http-сервера?

В окнах все в порядке, и я могу обмениваться информацией, но, поскольку это помещает вещи в vps linux, у меня возникла проблема, что он начал все на ipv6-сокете, что затрудняло мне подключение к клиентскому браузеру libary от socket.io

Я начинаю сервер, как это:

io = require('socket.io').listen(3000); 

которым работал отлично, и я мог соединиться. Теперь на Линукс VPS я пытался предотвратить ipv6, используя ipv4 адрес как этот

io = require('socket.io').listen(3000, '0.0.0.0'); 

, но это не сработало, а не на Linux, а не на окнах. Он не связывает сокет к ф я хочу это, если я не использовать сервер HTTP, как это:

http = require('http').createServer().listen(3000, '0.0.0.0'); 
io = require('socket.io').listen(http); 

Теперь мой вопрос, мне придется использовать сервер HTTP, чтобы решить проблему связывания сокета правильный локальный ip и порт или есть другое решение? И запускает ли socketio http-сервер в фоновом режиме в случае моей первой строки кода, так как это веб-сокет или работает сокетами без http-сервера?

Большое спасибо :)

ответ

20

Socket.io и WebSockets в целом, требуют сервер HTTP для начала сеанса связи. Поэтому, даже если вы не поставляете Socket.io с http-сервером, он будет создавать один для вас.

Проблема в том, что второй параметр в вашем io.listen(3000, '0.0.0.0') игнорируется Socket.io. Вам лучше идти с последним фрагментом, поскольку это, по сути, то, что Socket.io делает за кулисами. Единственное реальное различие заключается в том, что вы можете контролировать, какой интерфейс слушать.

+0

Большое спасибо, что помогает мне alot + 1 – Arkensor

Смежные вопросы