Node.js 如何使用Socket.io通信处理网络故障

Node.js 如何使用Socket.io通信处理网络故障,node.js,sockets,redis,socket.io,Node.js,Sockets,Redis,Socket.io,我正在设计一个包含Socket.io、Nodejs、Expressjs、Redis、Angularjs的系统,其中消息传递非常关键 用例: 我的系统需要侦听关于资源的通知,这些资源也可以在多个用户之间共享。套接字通过资源信息连接到服务器,这样我就可以维护每个资源的套接字列表。当有该资源的通知时,我会在该资源的每个套接字上发送通知 ResourceID1 = ["scoketID1", "socketID2"] // Two sockets listening to ResourceID1 我在

我正在设计一个包含Socket.io、Nodejs、Expressjs、Redis、Angularjs的系统,其中消息传递非常关键

用例:

我的系统需要侦听关于资源的通知,这些资源也可以在多个用户之间共享。套接字通过资源信息连接到服务器,这样我就可以维护每个资源的套接字列表。当有该资源的通知时,我会在该资源的每个套接字上发送通知

ResourceID1 = ["scoketID1", "socketID2"] // Two sockets listening to ResourceID1
我在套接字断开连接时也会通过删除特定的套接字id或resourceID列表来更新此列表

通过这种方式,我确保将通知发送给每个共享资源的用户和该用户的每个会话,以及每个套接字,每个套接字可以是一个会话的多个选项卡。简而言之,“每个插座”

我还为资源通知维护一个散列,以便每次有新的资源通知时,都会更新特定的资源通知散列

ResourceID1-notificationHash : { key1:"124", key2: "abc" }
这样做的原因是,如果插座断开连接,就像用户关闭了选项卡一样,或者更重要的是,用户Internet由于某种原因断开连接。服务器不接收心跳信号,再次建立套接字连接,并将该资源的最后一条消息发送到该套接字

要确保特定套接字(客户端)始终接收消息,我的实现是否足够?

我知道我可以为事件实现回调,但我所做的是当断开连接的特定选项卡(套接字)再次连接时,我会发送该资源的最后一条消息

ResourceID1 = ["scoketID1", "socketID2"] // Two sockets listening to ResourceID1
是否存在其他可能导致可靠消息传递问题的网络故障?


我的实现在某种意义上是不同的,对于消息传递,我不考虑用户,我考虑的是一个用户可以有多个套接字,就像一个用户可以同时有多个会话,比如说在firefox和chrome中,然后对于每个会话,他可以打开多个选项卡。选择套接字的原因是,我的资源可以在多个用户之间共享,因此对于一次资源更新,我可能必须向多个用户发送消息,每个用户都有多个会话,每个会话都有多个套接字。

可能重复@EMX我更关心网络故障和我实现的系统可能出现的情况失败。另一件事与您指出的问题不同的是,我的系统在发送系统正在考虑用户的消息时考虑了各个套接字。可能重复@EMX我更关心的是网络故障和我实现的系统可能失败的情况。另一件事与您指出的问题不同的是,我的系统在发送系统正在考虑用户的消息时考虑了各个套接字。