io.sockets.emit有效但io.sockets.on没有

时间:2018-04-03 20:27:11

标签: javascript node.js websocket socket.io

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

我的__main__如下所示:(此处server.js命令有效但emit没有)。我已经检查了类似问题的问题,但仍然没有得到任何明确的答案。

io.sockets.on

2 个答案:

答案 0 :(得分:1)

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
    })
    

答案 1 :(得分:0)

您需要安装express和socket.io例如。在您拥有文件的目录中,您可以在代码中看到,然后适当地引用这些链接

我已更新您的代码,因此快递和套接字的问题将起作用。它现在留给您确保您的应用程序按您喜欢的方式运行。 这里是如何安装快递的链接 https://www.npmjs.com/package/express

var socket  = require( './socket.io' );
var express=require('./express');
var app=express();
var server  = require('http').createServer(app);
var io      = socket.listen( server );
var port    = process.env.PORT || 3000;

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);
  });
})