gpt4 book ai didi

javascript - io.sockets.emit 有效但 io.sockets.on 无效

转载 作者:行者123 更新时间:2023-11-30 20:37:39 25 4
gpt4 key购买 nike

我必须将 Socket.IO 与 ExpressJS 路由一起使用。我能够向客户端发出事件但无法收听从客户端发出的事件。当我必须将套接字与 Express 路由一起使用时,就会出现此问题。

我的 server.js 看起来像这样:(此处 emit 命令有效,但 io.sockets.on 无效)。我已经检查了类似问题的问题,但仍然没有得到任何明确的答案。

var express = require('express');
var app = express();
var server = app.listen(3000);
var io = socketio(server);
app.set('socketio', io);
app.post('/deploy', function(request, response) {
var io = request.app.get('socketio');
var dapp = "some data";
io.sockets.emit('deploy', dapp);
io.sockets.on('deploy_result', (result) => {
console.log(result);
});
})

最佳答案

io.sockets.on(或io.on)不会让您收听所有事件,它仅用于“连接”事件。您必须将监听器附加到每个 socket 才能监听所有事件,如下所示:

io.on('connection', function (socket) {
socket.on('deploy_result', (result) => {
console.log(result)
})
})

此外,您似乎正在尝试为 emit 获取“确认”,在这种情况下,已经存在更好的方法 - 确认回调,只需传递一个回调方法作为附加方法参数(在数据之后):

  • server.js

    io.on('connection', function (socket) {
    socket.emit('deploy', {some: 'data'}, function acknowledgement_callback (result) {
    console.log(result)
    })
    })
  • client.js

    socket.on('deploy', (data, acknowledgement_callback) => {
    // Do something with `data`
    // Then call the callback with any result:
    acknowledgement_callback('result')
    // This will fire the "acknowledgement_callback" above on server-side
    })

关于javascript - io.sockets.emit 有效但 io.sockets.on 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49638610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com