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

标签 javascript sockets

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

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

enter image description here

问题是 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/

相关文章:

javascript - 测试数组长度时 Mocha 测试超时

javascript - 发送电子邮件时外文信件失败

java - 当另一个客户端发送到服务器时,如何让 UDP 服务器推送到客户端

python - 简单的Python 3聊天;同时发送和接收

c - 为什么不创建新文件描述符的类似 accept() 的套接字函数不可用?

c++ - 在来自多个线程的阻塞套接字上使用 send()

python - 使用IP地址获取主机名-Python

javascript - jQuery : insert a tag in an input box, 喜欢 Facebook

javascript - Knockout.js 可观察数组操作

javascript - 如果有足够的空间,如何将 div 列表分成两列?