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

Получить базовый образец socket.io для работы

У меня возникла проблема даже с тем, чтобы запустить основной образец socket.io. Например, первый пример на странице приветствия их сайта:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

на стороне сервера и

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

на стороне клиента. Если я сохраню серверную сторону в файле host.js и клиентской стороне в файле client.htm, и я запустил npm host.js, я получаю

   info  - socket.io started
   warn  - error raised: Error: listen EADDRINUSE

который уже не ожидался. Затем для client.htm (или, по крайней мере, того, что, как я думаю, я должен делать с этим - вставляя его в файл client.htm), я получаю пустой экран. Не удивительно, так как он начинается с включения несуществующего файла /socket.io/socket.io.js, но даже изменение этого на host.js (которое я предполагаю, что оно должно быть) не меняет того факта, что я получаю пустой экран...

Я не знаю.

4b9b3361

Ответ 1

EADDRINUSE означает, что адрес уже используется, поэтому он не может получить сокет. Что-то еще работает на порту 80 на вашем компьютере? 80 обычно используется веб-серверами.

Вы также можете попробовать его на другом порту.

Причина, по которой вы видите пустой файл, не подключается к серверу node (так как он не может получить сокет), так что новостное событие никогда не будет вызвано. Он может даже подключиться к сокету любого другого, работающего на 80, который никогда не испустит это событие:)

После того, как вы разрешите конфликт порта, когда вы запустите сервер, он должен просто сказать:

info - socket.io запущен

и теперь он ждет соединений.

Убедитесь, что вы обновили строку htm до вашего порта. Например, если 81:

var socket = io.connect('http://localhost:81'); // note the :81

EDIT: Я просто попробовал это, и в файле htm мне пришлось установить относительный путь к файлу socket.io.js. После установки через npm он был здесь, в моем каталоге.

<script src="node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>

Убедитесь, что путь относится к файлу htm (не начинается с /). Вот как я узнал, где моя:

find . -name 'socket.io.js'

В Win:   dir socket.io.js/s

Вы также должны запустить хост с (на * nix вам может понадобиться sudo спереди):

node host.js

Последнее, что я делал при попытке попробовать сменить пару строк в файле htm, чтобы я мог видеть окно предупреждения в случае события:

socket.on('news', function (data) {
   alert(JSON.stringify(data));