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

时间:2015-07-21 11:43:14

标签: javascript broadcast server-sent-events

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分: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;