如何使客户端代码在页面刷新时工作

时间:2013-05-06 13:59:15

标签: php javascript node.js websocket persistence

我需要为网络客户端提供推送通知,但问题是推送通知在页面刷新时不会停留在屏幕上。如何在没有编写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");
}

1 个答案:

答案 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中,它提供了localStoragesessionStorage的包装。< / p>