我正在使用包“socket.io-client”:“^2.2.0”
在我的网络应用程序中,我在 Bootstrap 上有以下代码:
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(...)
我尝试了@Keith 的 io()
与单独的 io.on
事件的建议,仍然没有骰子.
所以真正的问题是没有建立“连接”,但数据仍在网络上发送。我想我真的不了解套接字。明明没有建立连接也能发送数据?
最佳答案
看起来你的 console.log('Connect')
是全局的,所以无论如何它都会运行。尝试将其放入您的函数中,该函数在连接套接字时调用。所以在你的服务器上你有类似的东西
io.on('connection' function(socket) {
console.log('Socket Connected');
// Update
io.emit('autobox', autobox);
socket.emit('autobox');
})
你不能在路由中放置套接字代码,它必须在这个连接回调中并且只在这个回调中。至少那是我被告知的。希望这有帮助
关于javascript - Socket.io 客户端连接,socket.on 事件不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54674461/