Клиент Socket.io подключается, события socket.on не запускаются - PullRequest
0 голосов
/ 13 февраля 2019

Я использую пакет "socket.io-client": "^ 2.2.0"

В моем веб-приложении у меня есть следующий код при загрузке:

export const socket = io.connect(process.env.VUE_APP_SOCKET_URL, {
  reconnection: true,
  reconnectionDelay: 1000,
  reconnectionDelayMax: 5000,
  reconnectionAttempts: Infinity
})

Затем в цикле приложения у меня появляется следующий слушатель

import socket from './api/socket'

function handleAutobox() {
  console.log('handling autobox')
}
console.log('Connect')
socket.on('autobox', handleAutobox)

При проверке в производственном процессе я вижу, что код запущен («Connect» зарегистрировано).Я вижу, что сетевой трафик сокета перехвачен:

enter image description here

Проблема в том, что функция handleAutobox никогда не вызывается.Если я уверен, что запустил socket.on, как это возможно?

ОБНОВЛЕНИЕ: ДОБАВЛЕНИЕ КОДА СТОРОНЫ СЕРВЕРА:

let socket_io = require('socket.io'),
    io;

let server = http.createServer(app)
  .listen(app.get('port'), () => {
    io = socket_io.listen(server);
    console.info(`App listening on port ${port}!`);
  });

// ...inside route function:
io.emit('autobox', autobox);

ОБНОВЛЕНИЕ: ADDING socket.on('connect' ...):

При добавлении socket.on('connect' ...) непосредственно после создания сокета я обнаружил, что вызов также не вызывается.Вместо io.connect(...) я попробовал предложение @ Keith io() с отдельными io.on событиями, но все еще без игры в кости.

Таким образом, реальная проблема заключается в том, что «соединение» не устанавливается, но данные по-прежнему отправляются по сети.Я думаю, что я действительно не понимаю что-то о сокетах.По-видимому, данные могут быть отправлены, даже если соединение не установлено?

1 Ответ

0 голосов
/ 13 февраля 2019

Похоже, ваш console.log('Connect') глобален, поэтому будет работать независимо от того, что.попробуйте поместить его в вашу функцию, которая вызывает, когда сокет подключен.поэтому на вашем сервере у вас есть что-то вроде

io.on('connection' function(socket) {
  console.log('Socket Connected');
// Update
io.emit('autobox', autobox);
  socket.emit('autobox');
})

U вы не можете разместить код сокета внутри маршрутов, он должен быть внутри этого обратного вызова подключения и только этого обратного вызова.По крайней мере, это то, что мне сказали.Надеюсь, это поможет

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