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

How to use server sent event to broadcast to multiple users using javascript at client end and java at server end

本文关键字:javascript 用户 客户端 服务器端 java 服务器 何使用 广播 事件      更新时间:2023-09-26

我正在编写一个使用服务器发送事件的web应用程序代码,我想向一些特定用户广播消息。我想在客户端使用事件源,在服务器端使用球衣广播器。如果他们有其他方法来实现它。Websockets不支持在我的应用程序由于tomcat版本和长轮询,我不能在应用程序中使用。

任何人都可以与工作代码共享示例。提前感谢

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

当我们的用户想要通过流数据将JSON API转换为推送API时,通常会这样做。io (streamdata。(免责声明:我是一个开发人员@streamdata.io)。

使用流数据。io JS SDK,你也可以使用头信息来区分你的用户。注意,SSE不支持自定义报头:您需要使用查询参数。

如果你的用例依赖于JSON API,并且你想要推送数据,你可以使用流数据。io;)。

根据您的用例,另一种解决方案是为不同类型的用户使用一个EventSource和不同的消息。例如,标准用户只能收听类型为«standard»的消息,而特殊用户只能收听类型为«special»的消息。

在这种情况下,由客户端根据用户类型来过滤/区分要侦听哪些事件。但是由于只有一个事件源,你可以让客户端应用程序可以监听这两种类型的消息。

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

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

你可以在服务器端创建不同的事件,然后客户端只会监听与他们相关的事件。

服务器端

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;