【发布时间】:2019-02-13 16:01:22
【问题描述】:
我正在使用包“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(...),我尝试@Keith 的io() 建议与单独的io.on 事件,仍然没有骰子。
所以真正的问题是没有建立“连接”,但数据仍在网络上发送。我想我真的不了解套接字。明明没有建立连接也能发送数据?
【问题讨论】:
-
奇怪的是,这只发生在生产中。在我的开发环境中,一切正常。
-
你试过
io.on('autobox'...,因为从io.connect返回的套接字我认为是物理套接字,而不是socket.io的处理程序.. -
io.on不是像这样导入的函数:import io from 'socket.io-client' -
嗯,我通常创建一个实例..
const socket = io(); socket.on("cmd",...然后我们有函数on...
标签: javascript sockets