socket.io emit在socket.on中不起作用

时间:2017-01-05 16:27:43

标签: angularjs node.js express socket.io

我是socket.io的新手,所以我按照本教程的步骤here

我正在尝试从客户端向服务器发送值,然后进行一些计算并将新值发送到客户端的另一个视图。到目前为止,这是我的代码:

server.js

var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

io.on('connection', function(socket){

  socket.on('fromClient', function(data){
    console.log(data);
    //calculations will be here, not relevant
    socket.emit('fromServer', data);
  });

//  socket.send(req.query.gid);

  socket.on('disconnect', function () {
  });

});

client.js(应该接收'fromServer'发出的部分,这是一个角度控制器)

    var socket = io();
    socket.on('fromServer', function(data){
        console.log(data);
    });

我知道'fromClient'方面正在工作,因为它确实打印了数据的值,但它没有打印'fromServer'值。我不确定这里的问题是socket_on里面的socket.emit永远不会被调用(服务器),或者socket.on('fromServer')不能正常工作(客户端)。

为了记录,我做了另一个测试,它确实有效,但它只是快递。另一方面,我试图在我的项目中的socket.on之外使用socket.send和socket.emit而且它有效,所以我不确定它是否与angular有关,它是io.on( 'connection')事件,或者只是嵌套。

2 个答案:

答案 0 :(得分:3)

看起来没有人愿意回答我的任何问题...

这是socket.emit,看起来它不会发送给其他人,而是发送给同一个客户端,这就是为什么我能够在测试中看到它(有一个视图)而不是在我的真实项目中

答案是io.sockets.emit(...)

答案 1 :(得分:1)

在同一套接字内使用套接字事件时,请始终通过io调用该事件。 我已经在项目中使用了它,并且可以正常工作

答案是io.emit(...)

var io = require('socket.io')(strapi.server);
io.on('connection', async function(socket) {
    socket.on('getQuestionNext', (data)=>{
        io.emit('question', {message : 1})
    })
}