内部事件时,将数据发送给所有客户



我有一个node.js服务器,可以管理用户列表。创建新用户时,所有客户端应在列表中立即显示添加的用户。

我知道如何无需请求将数据发送给客户端 - 使用WebSocket,但是在此实现中,不允许Websocket。

当服务器中添加新用户时,是否可以在不使用WebSocket的情况下更新所有客户端的用户列表?

// Client side
const subscribe = function(callback) {
    var longPoll = function() {
        $.ajax({
            method: 'GET',
            url: '/messages',
            success: function(data) {
                callback(data)
            },
            complete: function() {
                longPoll()
            },
            timeout: 30000
        })
    }
    longPoll()
}
// Server Side
router.get('/messages', function(req, res) {
    var addMessageListener = function(res) {
        messageBus.once('message', function(data) {
            res.json(data)
        })
    }
    addMessageListener(res)
})

长时间的轮询是客户端从服务器请求新数据的地方,但是在有数据之前,服务器不会响应。同时,客户端与服务器有开放的连接,并且一旦服务器准备好发送了新数据。

参考:http://hungtran.co/long-polling-and-websockets-on-nodejs/

有第三种方法:推送通知

您的应用程序应在推送通知服务器(公共或专有(中注册,然后您的服务器将能够异步发送消息

您可以使用带有诸如sse-express的实现的服务器式事件:

// client
let eventSource = new EventSource('http://localhost:80/updates');
eventSource.addEventListener('connected', (e) => {
    console.log(e.data.welcomeMsg);
    // => Hello world! 
});
// server
let sseExpress = require('./sse-express');
// ... 
app.get('/updates', sseExpress, function(req, res) {
    res.sse('connected', {
      welcomeMsg: 'Hello world!'
    });
});

最新更新