我需要为网络客户端提供推送通知,但问题是推送通知在页面刷新时不会停留在屏幕上。如何在没有编写db的情况下在屏幕上显示定义的时间?
客户端
socket.on('notification', function (data) {
//console.log(data.message);
$('#pushnotif').html(data.message);
socket.emit('other', data);
});
服务器端
function sendMessage(message) {
io.sockets.volatile.emit('notification', {'message': message});
console.log("abc");
}
答案 0 :(得分:3)
推送通知被丢弃,因为刷新浏览器窗口时,将丢弃当前状态(包括整个DOM)。您需要在服务器端或客户端保留消息。
如果您已使用某种形式的会话,则可以将消息写入活动的会话。或者,如果您在提交之前已经存储了通知,则可以简单地延迟将其从该存储中删除(在一定时间内或直到用户解除它们,将事件发送回服务器)并重新发送每个初始连接上存储的所有通知。
但是因为你说你想避免写入数据库,我认为这是不可能的。
在客户端存储状态的传统解决方案是使用 cookies 来实现。您也可以通过操作document.cookie
在客户端设置Cookie,但这有点难看。
more modern approach正在使用 localStorage (大多数现代浏览器支持的特定于域和端口的键值存储)或其兄弟。如果您不想依赖HTML5支持(例如,您正在处理IE6用户),那么there are plenty of solutions提供各种等效的各种抽象。请注意,对于IE8及以下版本,存储大小可能非常有限,因此请注意您将哪些数据转储到其中。
如果您愿意将此功能的限制限制为现代Web浏览器的用户,并希望保留在jQuery there's even a jQuery plugin for that中,它提供了localStorage
和sessionStorage
的包装。< / p>