一个特定的“socket.on()”在客户端不起作用

Posted

技术标签:

【中文标题】一个特定的“socket.on()”在客户端不起作用【英文标题】:One specific "socket.on()" doesn't work on client side 【发布时间】:2019-10-11 07:40:18 【问题描述】:

服务器从 socket.emit("Wiadomosc") 收到消息,但客户端没有, 但是当我从服务器 io.emit("Wiadomosc") 发出消息时,客户端会收到消息;

没有错误,其他 socket.emit() socket.on() 工作正常 我尝试了一切:从工作功能中复制了所有内容,但什么也没有。 我认为我有问题而不是代码有问题

好的,客户端:

socket = io.connect("localhost:4000", 
        transports: ['websocket']
    );

    socket.on("Wiadomosc", function () 
        console.log("wd");
    );


    socket.on("gotowosc", function () 
        $(".gotowosc").css("display", "block");
    );

//somewhere else in code
console.log(socket) //to see if it's fine, and it is
socket.emit("Wiadomosc");

第二个效果很好

服务器端:

let express = require("express");
let app = express();
let server = app.listen(4000, function () 
  console.log("listening on port 4000");
);
let socket = require("socket.io");
let io = socket(server);

io.on("connection", function (socket) 
  socket.on("Wiadomosc", function ()  //I did something like that to check if emit works, and it works
    console.log("fine");
  );
);

io.emit("gotowosc");

【问题讨论】:

如果客户端没有收到socket.emit("Wiadomosc");,那么可能是因为您没有在服务器上使用正确的socket 对象,或者客户端上没有正确的监听器。我们必须看到更多的代码上下文(客户端和服务器)才能提供进一步的建议。 由于您可能是新来的,因此对于此类问题,*** 要求您提供Minimal, Reproducible Example。您需要发布更多代码来提供它。 好吧,我想这就是我们所需要的 socket.emit() 有效和无效的代码在哪里?你是说console.log("fine") 显示正确,但console.log("wd") 不正确? 另外,您的网页是从同一台服务器加载的吗?我问是因为我没有看到任何可以为您的网页或 socket.io 代码提供服务的快速路由。 【参考方案1】:

从客户端发送到服务器,而不是发送到任何其他客户端。如果您想从一个客户端向所有客户端发送消息,则向服务器发送一条消息,然后对服务器进行编码以接收它并将其发送给其他客户端。

【讨论】:

以上是关于一个特定的“socket.on()”在客户端不起作用的主要内容,如果未能解决你的问题,请参考以下文章

SocketIO - 如何向特定客户端发送数据

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

socket.io 强制断开客户端

使用dwr后,javaweb设置的session超时失效,web.xml和tomcat设置都不起作

从对象集合返回特定数组

从 socket.io 中删除特定的类方法监听器