如何使用服务器发送的事件通过客户端的javascript和服务器端的java广播给多个用户

问题描述 投票:2回答:3

我正在使用服务器发送的事件编写Web应用程序代码,在该事件中,我想向某些特定用户广播消息。我想在客户端使用eventsource,在服务器端使用jersey广播器。如果他们以其他方式实现它。由于tomcat版本和我无法在应用程序中使用长时间轮询,因此Websocket在我的应用程序中不受支持。

任何人都可以使用工作代码共享示例。在此先感谢

javascript broadcast server-sent-events
3个回答
1
投票

根据您的用例,另一种解决方案是针对不同类型的用户使用一个EventSource和不同的消息。例如,标准用户只能收听“标准”类型的消息,特殊用户只能收听“特殊”类型的消息。

在这种情况下,取决于用户的类型,由客户端过滤/区分要监听的事件。但是,由于只有一个事件源,因此您可以拥有可以监听这两种消息的客户端应用程序。

因此,选择一种或另一种解决方案实际上取决于用例。

我已经在同一github上提交了此解决方案。解决方案1标记为«v1»,解决方案2标记为«v2»。


2
投票

也许,我看到的解决方案是使用两个不同的EventSource来解决特定用户和标准用户。这意味着两个不同的URL。在示例代码there中,我使用查询参数来区分两种用户,但您也可以使用不同的路径(取决于您的用例)。

[通常这就是我们的用户想要通过streamdata.io将JSON API转换为推送API的情况(streamdata.io基于SSE(免责声明:我是开发人员@ streamdata.io)。

使用streamdata.io JS SDK,您还可以使用标头来区分用户。请注意,SSE不支持自定义标头:您需要使用查询参数。

[如果您的用例依赖于JSON API,并且您想推送数据,则可以使用streamdata.io;)。


0
投票

您可以在服务器端创建不同的事件,然后客户端将仅侦听与其相关的事件。

服务器端

echo "event: special_user\n";
$msg1="This is special user";
echo 'data: {"msg": "' . $msg1 . '"}';
echo "\n\n";

echo "event: normal_user\n";
$msg2="This is normal user";
echo 'data: {"msg": "' . $msg2 . '"}';
echo "\n\n";

特殊用户客户端

var evtSource = new EventSource("sender.php");
evtSource.addEventListener("special_user", function(e) {
var obj = JSON.parse(e.data);
var r_msg = obj.msg;

普通用户客户端

var evtSource = new EventSource("sender.php");
evtSource.addEventListener("normal_user", function(e) {
obj = JSON.parse(e.data);
var r_msg = obj.msg;
© www.soinside.com 2019 - 2024. All rights reserved.