服务器发送事件如何将响应发送到特定客户端
How Server Sent Event send response to a specific client
在服务器发送事件中,它始终向所有客户端发送相同的响应。 但我想知道的是,如何使用 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();
您只向所有客户端发送相同消息的原因是,您只有一个通道,它们都连接到。EventSource
只是您保持打开状态的GET
请求。像任何 get 请求一样,您可以通过几种方式将其定制给特定用户。
var eventSource = new EventSource("HelloServlet?username=their-user-name");
在此示例中,您将使用查询字符串为每个人创建唯一的频道。然后,您需要服务器端的逻辑来根据username
变量发送不同的内容。
您也可以使用会话。因此,您可以将当前代码保留在客户端上。
var eventSource = new EventSource("HelloServlet");
但是在服务器端,您需要检查会话,然后根据会话信息具有发送不同内容的逻辑。
这有帮助吗?
这篇文章很旧,但仍然值得一提的是这个问题的解决方案。我或多或少有相同的用例,我需要向用户发布通知,每个用户都有自己的通知。我使用了一个简单的技巧,EventSource 侦听事件,并将 userId 作为事件类型的一部分来区分用户。所以我没有在up_vote上,而是用了up_vote_userId1。我们的后端根据哪个用户有更新将事件发布到这些事件类型。我们的问题解决了。
我向你推荐JEaSSE库(Java Easy Server-Sent Events):http://mvnrepository.com/artifact/info.macias/jeasse
您可以在此处找到一些使用示例:https://github.com/mariomac/jeasse
具体来说,对于您的使用案例:
@WebServlet(asyncSupported = true)
public class ExampleServlet1 extends HttpServlet {
SseDispatcher dispatcher;;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
dispatcher = new SseDispatcher(req).ok().open();
}
public void onGivenEvent(String info) {
dispatcher.send("givenEvent",info);
}
}
- 使用 RESTful API,如果未定义特定的响应 json 级别,我如何在客户端不出错
- 可以't为客户端形成正确的JSON响应
- 从服务器到客户端的响应状态
- node.js+MySQL;JSON结果-回调问题&没有响应客户端
- 将简单的Perl脚本翻译成Python,向客户端发送响应
- Nodejs-websocket:如何在没有服务器响应的情况下连续发送客户端消息
- 在转发到代理目标并将响应发送回客户端之前,编辑POST参数
- 如何在谷歌地图服务的Go客户端中使用方向响应
- 客户端始终响应上一个服务器发送的事件,而不是当前事件
- Socket.io 和 Nodejs:向多个客户端发送响应并且更改未保存(?
- 如何在一个 Http 响应中将多个 mime 类型返回到 Web 客户端
- 如何使用 socket.io 等待客户端响应
- Socket.io 客户端:使用一个处理程序响应所有事件
- 如何在响应 Angular 客户端应用时发送 API 密钥
- 服务器发送事件如何将响应发送到特定客户端
- 节点.js xmpp 客户端收到“BAD_REGISTRATION”错误作为消息响应
- 向除发件人以外的所有客户端发送响应
- 节点ACS 404未找到Java http客户端的响应代码
- 为什么在未读取响应的情况下,节点http客户端仍在运行
- 与node.js我如何设置var从HTTP客户端响应