gpt4 book ai didi

javascript - 服务器发送事件如何向特定客户端发送响应

转载 作者:行者123 更新时间:2023-12-01 10:36:11 24 4
gpt4 key购买 nike

在 Server Sent Event 中,它总是向所有客户端发送相同的响应。但我想知道的是,如何使用 java 向唯一的一个客户端发送响应。

这是我在 sw.js (SSE) 中定义的事件

var eventSource = new EventSource("HelloServlet");
eventSource.addEventListener('up_vote',function(event){
console.log("data from s" , event.data);
var title = event.data;
self.registration.showNotification(title, {
'body': event.data,
'icon': 'images/icon.png'
})
});

我只想向特定用户显示此通知。不适合每一天。 HelloServlet 是我的 servlet,它包含这个,
response.setContentType("text/event-stream");   
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
String upVote = "u";
String downVote = "d";
for(int i=0; i<10; i++) {
writer.write("event:up_vote\n");
writer.write("data: "+ upVote +"\n\n");
writer.write("event:down_vote\n");
writer.write("data: "+ downVote +"\n\n");
writer.flush();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
writer.close();

最佳答案

您只向所有客户端发送相同消息的原因是因为您只有一个 channel ,它们都连接到。 EventSource只是一个 GET要求您保持开放状态。像任何获取请求一样,您可以通过多种方式将其定制给特定用户。

var eventSource = new EventSource("HelloServlet?username=their-user-name");

在此示例中,您使用查询字符串为每个人创建一个唯一 channel 。然后,您将需要服务器端的逻辑来根据 username 发送不同的内容。多变的。

您也可以使用 session 。因此,您可以将当前代码保留在客户端上。
var eventSource = new EventSource("HelloServlet");

但是在服务器端,您需要检查 session ,然后根据 session 信息有逻辑发送不同的内容。

这有帮助吗?

关于javascript - 服务器发送事件如何向特定客户端发送响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34992442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com