我有一个管理用户列表的Node.js服务器。创建新用户时,所有客户端应立即显示列表中添加的用户。
我知道如何在没有请求的情况下向客户端发送数据 - 使用Websocket,但在此实现中,不允许使用Websocket。
当在服务器中添加新用户时,是否可以在不使用Websocket的情况下更新所有客户端的用户列表?
答案 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!'
});
});