在内部事件发送数据到所有客户端

时间:2018-02-19 11:21:47

标签: node.js

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

我知道如何在没有请求的情况下向客户端发送数据 - 使用Websocket,但在此实现中,不允许使用Websocket。

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

3 个答案:

答案 0 :(得分:0)

// 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/

答案 1 :(得分:0)

还有第三种方式:Push Notifications

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

答案 2 :(得分:0)

您可以将server-sent events与[{3}}:

等实施结合使用
// 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!'
    });
});