在服务器发送事件中,它总是向所有客户端发送相同的响应。但我想知道的是,如何使用 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'
})
});
我只想向特定用户显示此通知。不适合所有人。 Hello Servlet 是我的 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();
您只向所有客户端发送相同消息的原因是因为您只有一个它们都连接到的通道。这EventSource
只是一个GET
请求您保持开放状态。与任何 get 请求一样,您可以通过多种方式将其定制给特定用户。
var eventSource = new EventSource("HelloServlet?username=their-user-name");
在此示例中,您将使用查询字符串为每个人创建一个唯一的频道。然后,您需要服务器端的逻辑来根据不同的内容发送不同的内容username
多变的。
您还可以使用会话。因此您可以将当前代码保留在客户端上。
var eventSource = new EventSource("HelloServlet");
但在服务器端,您需要检查会话,然后根据会话信息发送不同的内容。
这有帮助吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)