我正在使用服务器发送事件编写Web应用程序代码,其中我想向某些特定用户广播消息。我想在客户端使用eventsource,在服务器端使用jersey广播公司。如果他们以任何其他方式实现它。 由于我不能在应用程序中使用tomcat版本和长轮询,因此我的应用程序中不支持Websockets。
任何人都可以与工作代码共享示例。 提前致谢
答案 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;