我正在使用软件包“ 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”)。我看到套接字网络流量被捕获:
问题是从未调用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
,但仍然没有骰子。
因此,真正的问题是没有建立“连接”,但仍在网络上发送数据。我想我真的不太了解套接字。显然即使没有建立连接也可以发送数据吗?
答案 0 :(得分:1)
您的console.log('Connect')
似乎是全局的,因此无论如何都可以运行。尝试将其放在连接套接字的情况下调用的函数中。所以在您的服务器上,您是否有类似的东西
io.on('connection' function(socket) {
console.log('Socket Connected');
// Update
io.emit('autobox', autobox);
socket.emit('autobox');
})
U不能将套接字代码放置在路由内,它只能在此连接回调和此回调内。至少那是我被告知的。希望这会有所帮助