Session 实时连接(SockJS/Socket.io)和微服务应用程序

Session 实时连接(SockJS/Socket.io)和微服务应用程序,session,socket.io,real-time,microservices,sockjs,Session,Socket.io,Real Time,Microservices,Sockjs,目前,我正在微服务体系结构中构建一个应用程序 第一个应用程序是一个API,它执行用户身份验证,接收请求以启动/保持与用户的实时连接(通过Socket.io或SockJS),系统将套接字id存储到用户对象中 第二个应用程序是一个工人,他做一些事情,有时他必须向用户发送实时数据 问题是:第二个应用程序(工作者)应该如何向用户发送实时数据 工作者是否应向API发送消息,然后API是否应将此消息转发给用户? 或者工作者可以直接将消息发送给用户 谢谢在一个完美的示例中,负责发送“发布”实时推送通知的服务应

目前,我正在微服务体系结构中构建一个应用程序

第一个应用程序是一个API,它执行用户身份验证,接收请求以启动/保持与用户的实时连接(通过Socket.io或SockJS),系统将套接字id存储到用户对象中

第二个应用程序是一个工人,他做一些事情,有时他必须向用户发送实时数据

问题是:第二个应用程序(工作者)应该如何向用户发送实时数据

工作者是否应向API发送消息,然后API是否应将此消息转发给用户? 或者工作者可以直接将消息发送给用户


谢谢

在一个完美的示例中,负责发送“发布”实时推送通知的服务应该与其他服务分开。因为微服务是一组狭义相关的方法,身份验证“用户”服务和实时推送通知服务之间没有关系。深入分析一下,身份验证实际上是一项独立的服务,仅供参考,您这样做可能是有原因的

服务将如何沟通?实际上,有很多方法可以实现服务之间的内部通信,MQ解决方案,它可以为堆栈添加更多技术,如Rabbit MQ、Beanstalk、Gearman等

,您也可以在HTTP协议的顶部进行通信,但是您需要考虑HTTP调用会增加更多的开销。


完美的解决方案是,每个服务都必须有一个接口来代表它们执行,HTTP接口和MQ接口(控制台)

在第一个场景中,用户需要一个与APi和worker的活动套接字连接。在第二种情况下,只需要一个API。另外,如果worker可以直接发送给用户,那么您很可能需要复制API和worker上的所有用户身份验证和管理。然后API和工作人员可以通过使用内部pubsub系统与Websocket服务通信来发送Websocket消息。