我有一个我正在制作的聊天应用程序,现在,当你打开应用程序时,页面会运行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支持的速度。提前感谢!
发布于 2018-06-10 04:11:09
在插入回元素时使用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 );
});
https://stackoverflow.com/questions/50778010
复制相似问题