从客户端添加套接字发出

Add socket emit from client side

本文关键字:套接字 添加 客户端      更新时间:2023-09-26

我正在尝试在我玩的在线浏览器游戏中创建一个新的套接字事件处理程序,这样我就可以在安装了相同userscript的玩家之间发送数据。

游戏使用socket。到目前为止,我所做的是:我添加了一个用户端套接字。在处理器上,像这样:

game.socket.on("hello", function() { console.log("hello there") })

我在连接到同一游戏的两个玩家上这样做,但是当我这样做时:

game.socket.emit("hello")

只有发出emit的玩家退出hello there

我的猜测是服务器端没有发出名称为hello的事件的处理程序。是否有一种方法,我可以在不访问服务器端代码的情况下添加,或者绕过它并将数据直接发送给其他玩家?

我将添加一点,并将我的评论变成一个答案:

一个套接字。IO连接是客户机和服务器之间的连接。从客户机,在该连接上所能做的就是发送到服务器。因此,game.socket.emit("hello")将只向服务器发送一条消息。

如果你想让你的服务器将该消息发送给其他用户,你将需要添加代码到服务器来侦听该消息,然后在接收到该消息时将其发送给其他玩家。套接字。IO是客户机到服务器的连接。

你不能直接从一个客户端发送到另一个套接字。IO(或在websocket中使用哪个socket)。IO是基于的。相反,您必须将其发送到服务器,并让服务器将其转发到其他客户机。

插座。考虑到你的房间id是room_one:

,你可以从客户端发送你的消息,并使用服务器端发送此消息给所有房间成员,: 客户:

var socket = io();  
socket.on('connect',function(){      
      socket.emit('join','room_one');
      socket.emit('room_message',{hello:'hello'});
});   
socket.on('room_message',function(data){
      console.log(data);
})   

服务器:

io.sockets.on('connection',function(socket){    
    socket.on('join',function(room){
        socket.join(room);
    });
    socket.on('room_message', function(data) {        
        io.to('room_one').emit('room_message',{world:'world'});
    });
});

希望这对你有帮助!

我将房间中的当前用户显示给所有连接的套接字:

服务器端

socket.join(user.room);
io.to(user.room).emit('roomData',{room:user.room, users: getUsersInRoom(user.room)});
客户端

socket.on('roomData',(data)=>{
    console.log(data);
    currentUsers.innerHTML='${data.users.length} Users Online in ${data.room} Room'
});