socket.io 发射在 socket.on 中不起作用

Posted

技术标签:

【中文标题】socket.io 发射在 socket.on 中不起作用【英文标题】:socket.io emit doesn't work inside socket.on 【发布时间】:2017-05-20 06:52:18 【问题描述】:

我是 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 并且它有效,所以我不确定它是否与角度有关,它是 io.on( 'connection') 事件,或者只是嵌套。

【问题讨论】:

【参考方案1】:

似乎没有人愿意回答我的任何问题...

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

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

【讨论】:

【参考方案2】:

当你在同一个套接字中使用套接字事件时,总是通过 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)
    )

【讨论】:

以上是关于socket.io 发射在 socket.on 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

socket.io和express服务器没有从客户端接收发射

用户杀死应用程序后,Socket.io android socket.on 不起作用

socket.io emit返回相同的值

socket.io 中 io.on 和 socket.on 的区别

当接收器离线时,socket.io 发出不工作

当接收器离线时,socket.io 发出不工作