Socket.io客户端连接,socket.on事件不会触发

时间:2019-02-13 16:01:22

标签: javascript sockets

我正在使用软件包“ socket.io-client”:“ ^ 2.2.0”

在我的Web应用程序中,我在引导程序上具有以下代码:

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);

更新:添加socket.on('connect' ...)

在创建套接字后直接添加socket.on('connect' ...)时,我发现两者均未调用。我尝试使用单独的io.connect(...)事件尝试@Keith的io()建议,而不是io.on,但仍然没有骰子。

因此,真正的问题是没有建立“连接”,但仍在网络上发送数据。我想我真的不太了解套接字。显然即使没有建立连接也可以发送数据吗?

1 个答案:

答案 0 :(得分:1)

您的console.log('Connect')似乎是全局的,因此无论如何都可以运行。尝试将其放在连接套接字的情况下调用的函数中。所以在您的服务器上,您是否有类似的东西

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

U不能将套接字代码放置在路由内,它只能在此连接回调和此回调内。至少那是我被告知的。希望这会有所帮助