YM-*_*-91 3 javascript client-server push-notification server-sent-events server
在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'
})
});
Run Code Online (Sandbox Code Playgroud)
我想仅向特定用户显示此通知.不适合每一个人.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();
Run Code Online (Sandbox Code Playgroud)
您只向所有客户端发送相同消息的原因是因为您只有一个它们都连接到的通道.这EventSource只是一个GET你要离开的请求.像任何获取请求一样,您可以通过几种方式让特定用户定制它.
var eventSource = new EventSource("HelloServlet?username=their-user-name");
Run Code Online (Sandbox Code Playgroud)
在此示例中,您使用查询字符串为每个人创建唯一的通道.然后,您需要在服务器端使用逻辑来根据username变量发送不同的内容.
您也可以使用会话.因此,您可以将当前代码保留在客户端上.
var eventSource = new EventSource("HelloServlet");
Run Code Online (Sandbox Code Playgroud)
但是在服务器端,您需要检查会话,然后根据会话信息具有发送不同内容的逻辑.
这有帮助吗?
| 归档时间: |
|
| 查看次数: |
2865 次 |
| 最近记录: |