【问题标题】:Node and Socket Chat App - Show only 25 recent messages节点和套接字聊天应用程序 - 仅显示 25 条最近的消息
【发布时间】:2018-11-19 12:57:39
【问题描述】:

我正在制作一个聊天应用程序,现在,当您打开该应用程序时,页面会运行 SQL 查询并通过isactive = 1 检查提取最后 25 条消息。当用户发布消息时,我使用 Socket.io 和 Node.js 将消息回显给其他用户并将其附加到聊天屏幕。它也会同时提交到数据库,因此新用户将看到该消息。这是我现在用来附加消息的代码(稍后会设置样式)

socket.on( 'message', function( data ) {
    console.log("saw a request to the socket");
    var actualContent = $( "#messages" ).html();
    var newMsgContent = '<li> NAME: ' + data.name + ' = ID: ' + data.id + ' = AVATAR: ' + data.avatar + ' = MESSAGE: ' + data.message + '</li>';
    var content = newMsgContent + actualContent;
    $( "#messages" ).html( content );
});

由于我只是附加消息,它没有不重新加载就删除消息的功能,并且随着聊天消息的发布,它还会继续永远发布到您的屏幕上,这将导致大量滚动窗口和使用在页面上。

有没有办法限制它只显示 25 条最新消息?或者我应该不让系统附加消息,而是使用数据库中的最新数据重新加载内容 div?我看到的缺点是它会创建更多的数据库调用并阻塞 SQL 服务器。有什么更好的方式来传达这些事件?

我是 Socket 和 Node 的新手,到目前为止我很喜欢它。我以前的聊天引擎使用纯 JS,每 4 秒检查一次内容,如果有变化,它会重新加载整个 div。这会导致消息延迟并且感觉非常笨拙,所以我喜欢 Node 支持的速度。提前致谢!

【问题讨论】:

  • 在您的数据库中,包括一个时间戳,您可以对其进行排序,然后将您的选择表达式“限制”为从数据库返回到客户端以进行后续分页的数字。techonthenet.com/sql/select_limit.php
  • 我知道如何使用 SQL 来限制它。这已经完成了,但是如果您从不刷新页面,套接字将继续附加到 HTML 并且有限的消息会消失,因为它不会重新加载查询以仅显示最新消息,而是在它们进入时显示所有消息(作为套接字工作方式的性质)。我可能只是使用套接字来监听消息,然后为每个人重新加载 div,即使这样做会占用更多资源。

标签: javascript jquery node.js socket.io


【解决方案1】:

在插入元素时使用slice:

socket.on( 'message', function( data ) {
    console.log("saw a request to the socket");
    var actualContent = $( "#messages" ).html();
    var newMsgContent = '<li> NAME: ' + data.name + ' = ID: ' + data.id + ' = AVATAR: ' + data.avatar + ' = MESSAGE: ' + data.message + '</li>';
    var content = newMsgContent + actualContent;
    content = $(content).slice(0, 25).map(function(i, x) { return x.outerHTML }).toArray().join(''); // Will return first 25 messages
    $( "#messages" ).html( content );
});

【讨论】:

  • @kaboom 我刚刚更新了content。在 jquery 集合上调用 html() 只会给出第一个节点的 html,而不是整个集合。我将集合单独映射到 html。我确信一定有更好的方法来做我正在做的事情,但它应该为你指明正确的方向。
  • 我看到了。感谢您的帖子,这对我很有帮助!标记为答案
猜你喜欢
  • 1970-01-01
  • 2019-06-29
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多