假设我有这种情况:
Client1和client2以某种session1连接
同时,client3和client4在session2中连接
现在我想播放活动" a"仅限session1中的所有客户端。
我发现了这个例子:
https://github.com/totaljs/examples/tree/master/server-sent-events
但我还没有找到如何实现我的目标。
请问任何想法?
答案 0 :(得分:0)
对于这种情况,最好使用WebSocket。 Server-Sents事件(SSE)的答案:
<强>控制器/ default.js 强>:
var session1 = [];
var session2 = [];
exports.install = function() {
F.route('/broadcast/{session}/', sse_broadcast, ['sse']);
};
function sse_broadcast(session) {
var self = this;
switch (session) {
case '1':
session1.push(self);
return;
case '2':
session1.push(self);
return;
}
self.throw400('This session is not supported.');
}
setInterval(function() {
if (session1.length === 0)
return;
var message = U.GUID(20);
var remove = -1;
// broadcast all clients of session1
for (var i = 0, length = session1.length; i < length; i++) {
var session = session1[i];
if (!session.isConnected) {
remove = i;
continue;
}
session.sse({ message: message });
}
if (remove === -1)
return;
session1[remove].destroy();
session1.splice(remove, 1);
}, 1000);
<强>客户端:强>
<div id="message"></div>
<script type="text/javascript">
function init() {
var el = document.getElementById('message');
var obj = new EventSource('/broadcast/1/');
obj.onmessage = function(ev) {
el.innerHTML = ev.data + '<br />' + el.innerHTML;
};
obj.addEventListener('end', function() {
el.innerHTML = '----- end<br />' + el.innerHTML;
}, true);
obj.onerror = function(e) {
el.innerHTML = '----- error<br />' + el.innerHTML;
};
}
setTimeout(init, 500);
</script>