TL; DR 在下面。
我目前正在开发一个由实时数据驱动的React / Redux SPA。我决定使用ws
代替socket.io
,因为socket.io
对我正在做的事感觉有点高,我宁愿自己管理套接字
说到这一点,我很难找到一种方法来管理每个视图/路由的更新/消息分离。由于我使用客户端路由,因此每条快速路线都无法正常工作......
服务器和客户端之间通过WebSockets发送的消息是JSON,其行为类似于GET_ITEMS
,然后是GET_ITEMS_SUCCESS
的响应,其中包含一系列'项目'和错误:..._ERROR
等。这一切都很好,因为它只是1比1的交易。虽然在服务器收到更新时向所有相关客户端广播(1到全部)时会出现问题。
因此,我认为最佳做法是将这些广播限制在正在查看/想要数据的客户端。因此,在查看Item
页面时,无法广播User
数据的更新,因为这仅用于User
页面。
在处理这种情况时,我还没有找到任何常见的做法,只需要为ws
添加一些小的过时/几乎不用的包装,只需添加一些基本功能即可离开/加入但实施时并没有多大的灵活性。
我认为 MIGHT 工作的目的是为每个' /' room'提供一个对象/数组,它存储当前正在侦听的客户端来自给定部分的更新。因此,用户可以使用类别的参数向INIT_LISTEN
(&``)发送操作,例如ITEM
用于更新和与项目相关的其他操作。
<小时/> TL; DR
我的问题归结为:我如何存储对单个套接字的引用? (ws
客户端对象?ws
客户端ID?)然后,我可以将它存储在一个对象/数组中,如下所示进行迭代。
const ClientRooms = {
Items: {
{
...ws
}
/* ...rest of the client */
}
}
或
const ClientRooms = {
Items: [ "xyz" ] /* Array of ws ids */
}
我有一个&#34;乒乓球&#34;心跳功能可以使客户端保持活动状态并防止静默连接失败/断开连接。我无法找到ws.terminate()
是否仍会触发ws close
事件,因此我可以重复组合&#39; /&#39; room&#39;用于查找和删除该客户端实例的对象/数组。