Подтвердить что ты не робот

Socket.IO без http-сервера?

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

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

Я запускаю сервер следующим образом:

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

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

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

но это не сработало, а не на linux, а не на windows. Он не привязывает сокет к ip, который я хочу, если я не использую http-сервер следующим образом:

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

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

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

4b9b3361

Ответ 1

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

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