我正在使用Socket.io,Nodejs,Expressjs,Redis,Angularjs设计一个系统,其中消息传递非常重要。
使用案例
我的系统需要侦听资源上的通知,这些资源也可以在多个用户之间共享。套接字连接到服务器,包含有关资源的信息,以便我可以维护每个资源的套接字列表。当存在该资源的通知时,我会在该资源的每个套接字上发送通知。
ResourceID1 = ["scoketID1", "socketID2"] // Two sockets listening to ResourceID1
我还通过删除特定套接字ID或resourceID列表来更新套接字断开连接上的列表。
这样,我确保将通知发送给共享资源的每个用户以及该用户的每个会话以及每个可以是一个会话的多个选项卡的套接字。简而言之,“每个插座”。
我还维护资源通知的哈希值,这样每次有资源的新通知时,都会更新特定的资源通知哈希值。
ResourceID1-notificationHash : { key1:"124", key2: "abc" }
这样做的原因是,如果套接字断开,就像用户关闭了标签,或者更重要的是用户互联网由于某种原因而断开连接。并且服务器不再接收心跳套接字连接,并将该资源的最后一条消息发送到该套接字。
要确保特定套接字(客户端)始终收到消息,我的实现是否足够?
我知道我可以为一个事件实现回调,但我所做的是当一个断开的特定标签(套接字)再次连接时,我发送该资源的最后一条消息。
是否还有其他可能导致可靠邮件传递问题的网络故障?
我的实现在某种意义上是不同的,对于消息传递我不考虑用户,我正在考虑套接字,对于一个用户可以是多个,例如一个用户可以同时拥有多个会话,可以说在firefox和chrome中然后,对于每个会话,他可以打开多个选项卡。选择套接字的原因是我的资源可以在多个用户之间共享,因此对于一次资源更新,我可能必须将消息发送给多个用户,每个用户都有多个会话,每个会话都有多个套接字。