[英]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.