当前位置: 首页 > 知识库问答 >
问题:

如何使用套接字向特定客户端发送消息。木卫一

萧韬
2023-03-14

我从插座开始。io节点。js,我知道如何在本地发送消息和广播socket。广播emit()函数:-所有连接的客户端都接收相同的消息。

现在,我想知道如何向特定客户端发送私人消息,我的意思是两个人之间的私人聊天(客户端到客户端流)的一个套接字。谢谢。

共有3个答案

祁增
2023-03-14

当然,很简单,

这就是你需要的:

io.to(socket.id).emit("event", data);

每当用户加入服务器时,都会生成套接字详细信息,包括ID。这个ID确实有助于向特定的人发送消息。

首先,我们需要存储所有的插座。数组中的ID,

var people={};

people[name] =  socket.id;

这里name是接收方名称。示例:

people["ccccc"]=2387423cjhgfwerwer23;

现在我们可以拿到那个插座了。当我们发送消息时,带有接收者名称的id:

为此,我们需要知道收件人的名称。您需要向服务器发送接收器名称。

最后一件事是:

 socket.on('chat message', function(data){
io.to(people[data.receiver]).emit('chat message', data.msg);
});

希望这对你有好处。

祝你好运

孔华池
2023-03-14

当用户连接时,它应该向服务器发送一条用户名必须唯一的消息,如电子邮件。

一对用户名和套接字应存储在如下对象中:

var users = {
    'userA@example.com': [socket object],
    'userB@example.com': [socket object],
    'userC@example.com': [socket object]
}

在客户端上,向服务器发出包含以下数据的对象:

{
    to:[the other receiver's username as a string],
    from:[the person who sent the message as string],
    message:[the message to be sent as string]
}

在服务器上,侦听消息。接收到消息时,向接收器发送数据。

users[data.to].emit('receivedMessage', data)

在客户机上,侦听来自名为“receivedMessage”的服务器的发射,通过读取数据,您可以处理来自谁以及发送的消息。

龚凯泽
2023-03-14

你可以使用插座。io房间。从客户端发出具有任何唯一标识符(电子邮件、id)的事件(在本例中,join可以是任何内容)。

客户端:

var socket = io.connect('http://localhost');
socket.emit('join', {email: user1@example.com});

现在,从服务器端使用该信息为该用户创建一个独特的房间

服务器端:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.on('join', function (data) {
    socket.join(data.email); // We are using room of socket io
  });
});

所以,现在每个用户都加入了一个以用户电子邮件命名的房间。因此,如果您想向特定用户发送消息,您只需

服务器端:

io.sockets.in('user1@example.com').emit('new_msg', {msg: 'hello'});

客户端最后要做的就是收听“new_msg”事件。

客户端:

socket.on("new_msg", function(data) {
    alert(data.msg);
}

我希望你能明白。

 类似资料:
  • 问题内容: 我从socket.io + node.js开始,我知道如何在本地发送消息和广播功能:-所有连接的客户端都收到相同的消息。 现在,我想知道如何向特定的客户端发送私人消息,我的意思是一个套接字,用于2个人之间的私人聊天(客户端到客户端流)。谢谢。 问题答案: 当用户连接时,它应使用唯一的用户名(例如电子邮件)向服务器发送消息。 一对用户名和套接字应存储在这样的对象中: 在客户端上,使用以下

  • 我有一个使用MINA版本2的服务器设置。我对套接字和TCP没有太多的经验。 我尝试在调试模式下运行MINA日志记录,并记录 它们总是返回true、true、false。此外,在调试模式下,没有说明连接已丢失的有用信息。它只是记录了常规的“已发送消息”内容,好像没有什么问题。 在使用Flash actionscript时,我有过这样的经历:Flash会抛出错误,指出它在无效的套接字上操作。这让我相信

  • 关于使用Java套接字的例子有上百万个——每个都是一样的!每一个都显示了一个正在创建的客户机套接字,一些文本正在发送,并且套接字已关闭。 我正在编写一些测试代码。我希望我的客户端循环并发送相当多的消息。每次关闭客户端套接字并重新创建似乎很傻,所以我想我只创建一个客户端套接字,循环循环并在同一个套接字上发送数据。问题是——我的服务器套接字不会打印出它收到的内容,直到客户端发送最后一条消息并且客户端套

  • 我有一个关于如何改进这个代码的问题。我是Socket.io的新手,我一直在YouTube上看一个关于私人信息的视频教程。我只是想知道有没有更好的方法来改进下面的代码行? 但似乎不起作用。

  • 我正在存放插座。每个用户使用redis登录时的id 当这个用户的任何帖子。_id被创建时,我试图使用上面存储的socket.id向那个特定用户的套接字发出一个事件 问题是我无法使用上述代码向该特定套接字发出。我正在使用套接字。io版本

  • 我需要一个推送消息服务器的方案。 现在我选择AutobahnJs+AutobahnPython方案。 AutobahnJs库使用html5的websocket连接AutobahnPython使用的服务器 在javascript中,使用订阅通道,每个客户端使用相同的订阅通道。clientD将消息发布到通道(与订阅通道相同),服务器将消息传递给订阅该通道的所有客户端。 这里有一个问题,我需要应用程序(