提问者:小点点

Socket.IO发射在Socket.On内部不起作用


我是Socket.io的新手,所以我在这里遵循本教程的步骤

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

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(应该接收'from server'发射的部分,这是一个角控制器)

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

我知道“from client”端是工作的,因为它可以打印数据的值,但是它不打印“from server”的值。我不确定这里的问题是Socket.on中的Socket.emit从未被调用(服务器),还是Socket.on('from server')不工作(客户端)。

为了记录在案,我做了另一个测试,它确实有效,但它只是与Express。另一方面,我试图在我的项目中使用socket.On之外的socket.send和socket.emit,结果成功了,所以我不确定它是否与angular有关,是io.On('connection')事件,还是只是嵌套。


共2个答案

匿名用户

看来没人想回答我的问题。。。

它是socket.emit,看起来它并没有将它发送给其他人,而是发送给同一个客户机,这就是为什么我能够在测试中看到它(只有一个视图),但在我的实际项目中却看不到它。

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

匿名用户

当您在同一个套接字内使用套接字事件时,请始终通过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})
    })
}