我需要帮助为我正在开发的应用程序的一部分找到有效的模式。
每个用户都有一个称为网关的设备。网关。这些网关通过GatewayLogic与应用程序的在线系统进行通信。所以GatewayLogic是在线系统的入口点,所有用户的网关都连接到它。这种通信是通过 3G 网络完成的。
有一个限制。由于 3G 网络上的 IP 地址经常变化,网关和GatewayLogic之间的通信始终必须由网关发起。问题是数据必须双向传输。数据必须从在线系统到达网关,并且数据必须从网关到达在线系统。因此,这本质上是一种始终由一个组件(网关)发起的双向通信。
我正在考虑通过让GatewayLogic为每个网关维护一个队列来解决这个问题。每个网关定期轮询GatewayLogic上的队列以获取新数据。但我不确定这个解决方案是否具有足够的可扩展性。
我的问题是:是否有一种设计模式可以更有效地解决这个问题?
最佳答案
鉴于您不想使用套接字(如果是 Web 应用程序,则为 websocket)或任何其他推送技术之类的东西,因为您总是希望由网关发起通信,因此为每个网关建立一个队列可能是一个不错的选择解决方案,但如果不限制队列大小,可能会出现重大问题,特别是如果网关太多并且可能会发生连接丢失。
您确定不能使用长轮询或套接字之类的东西吗?您可以通过处理网络变化状态并在 IP 变化时进行套接字迁移来轻松处理 IP 变化。
也许你可以尝试修改comet(https://en.wikipedia.org/wiki/Comet_(programming))协议(protocol)来寻找出路
关于design-patterns - 模式 - 始终由同一方发起的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36599775/