【发布时间】: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