如何使用socket.io在节点js的右侧显示发送消息并在左侧显示接收消息

Posted

技术标签:

【中文标题】如何使用socket.io在节点js的右侧显示发送消息并在左侧显示接收消息【英文标题】:how to display send message on right side and recieved message on left side in nodejs using socket.io 【发布时间】:2018-09-27 11:05:24 【问题描述】:

我正在使用socket.io 制作一个聊天框。但是当我尝试在他们各自的一侧显示消息时,就会出现问题。

我想在右侧显示发送消息,在左侧显示接收消息。

我想要-

received message
received message
                  send message
received message

html 文件代码是 -

   <div class="panel-body">
           <ul class="chat" id="chat"></ul>
   </div>

我的客户端代码是-

       $messageForm.click(function (e) 
            e.preventDefault();
            socket.emit('send message', $message.val());
            $message.val('');
        );

        socket.on('new message', function (data) 
                $("#chat").append('<div style="text-align: right"><strong>' + data.user + '</strong> : ' + data.msg + '</div>').scrollTop(1E10);
        );

我的服务器端代码是 -

 //send message
    socket.on('send message', function (data) 
        io.sockets.in(socket.room).emit('new message', msg: data, user: socket.username);
    );

我尝试了很多方法,但我不知道该怎么做。

请大家给点建议。

提前感谢。

【问题讨论】:

你能显示一些代码吗? @SmitRaval html 代码? html 和 socket. @SmitRaval 请检查。 你在哪里附加发送的消息?我找不到那个代码。 【参考方案1】:

嗯, 您需要做的就是跟踪谁是“这个”用户(您)以及谁是其他用户。 所以,保存你用来识别用户的“id”、“name”(名字是个坏主意)。 然后,在渲染消息时,为这些元素添加不同的 html 类。

例子:

<div class="message other-user"> message.text </div>
<div class="message this-user"> message.text </div>

然后,只需在 css 中创建类

例子:

.message.other-user  text-align: left 
.message.this-user text-align: right

【讨论】:

感谢您的回答,但我不知道如何区分两个用户。 好吧,当你附加消息时(当你收到它时)你有 data.text 和 data.user。现在,您应该为每条消息添加类似 data.userId 的内容(例如)。对于您的用户(“self”),应将其自己的 userId 存储在浏览器中的某处(对于(坏)示例 window.myUserId,或在浏览器的 LocalStorage/SessionStorage 中)。因此,每当您从套接字接收到带有 data.userId === window.myUserId 的消息时,您就把它放在右边,否则放在左边。有意义吗? 是的,我明白,但问题是例如(让 user1 = 1 和 user2 = 2 的 id 和 user2 加入房间到 user1 的 id=1 即 1,所以当我正在尝试向他们的特定 id 发送消息,例如 id=1 ,然后将消息发送给两个用户,因为他们都连接到 id=1。你对此有什么建议吗? 为简单起见,假设只有一个房间。现在,如果我加入只有你的房间,并发送一条消息,它会发送给两个用户。这很好。唯一的区别是您将(通过 userId)看到消息来自我并显示在左侧,如果您发送消息,您将看到(消息的)userId 与您的 userId 相同并将其显示在右侧。这样,我们俩在聊天对话框中都会有 2 条消息

以上是关于如何使用socket.io在节点js的右侧显示发送消息并在左侧显示接收消息的主要内容,如果未能解决你的问题,请参考以下文章

在节点 js 中推送通知

如何在socket.io中向特定用户发送消息?

(节点 js 上的 Socket.io)使用 mysql 数据更新 div 停止而不显示错误

需要在节点js,socket.io,express js,ionic 3的实时聊天应用程序中提供建议

socket.io :从服务器节点 js 接收数据

节点 Js 无法将消息发送到在线特定套接字