繁体   English   中英

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

[英]Socket.io Client connects, socket.on events don't fire

我正在使用包“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)

在生产中进行检查时,我看到代码已运行(记录了“连接”)。 我看到套接字网络流量被捕获:

在此处输入图片说明

问题是从不调用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(...)我尝试了io.connect(...)io()建议与单独的io.on事件,仍然没有骰子。

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

看起来您的console.log('Connect')是全局的,因此无论如何它都会运行。 尝试将它放入一个在连接套接字时调用的函数中。 所以在你的服务器上你有类似的东西吗

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

你不能把套接字代码放在路由里面,它必须在这个连接回调和这个回调里面。 至少这是我被告知的。 希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM