我需要帮助为我正在开发的应用程序的一部分找到有效的模式。
每个用户都有一个名为 Gateway 的设备。这些网关通过 GatewayLogic 与应用程序的在线系统进行通信。因此 GatewayLogic 是在线系统的入口点,所有用户的网关都与之相连。该通信通过3G网络完成。
有一个约束。由于3G网络上的IP地址频繁更改,因此网关与 GatewayLogic 之间的通信始终必须由网关启动。问题是数据必须双向传播。数据必须从在线系统到达网关,数据必须从网关到达在线系统。所以这实际上是双向通信,总是由一个组件 Gateway 启动。
我正在考虑通过让 GatewayLogic 为每个网关维护一个队列来解决这个问题。每个 Gateway 定期轮询 GatewayLogic 上的队列以获取新数据。但我不确定这个解决方案是否足够可扩展。
我的问题是:是否有一种设计模式可以更有效地解决这个问题?
答案 0 :(得分:2)
鉴于您不想使用套接字(websocket,如果它是Web应用程序)或任何其他推送技术,因为您总是希望通过Gateway启动通信,为每个网关建立一个队列可能是一个好的解决方案,但如果您不限制队列大小可能会遇到重大问题,特别是如果网关太多并且可能发生连接丢失。
您确定不能使用长轮询或套接字吗?通过处理网络更改状态并在IP更改时执行套接字迁移,您可以轻松处理IP更改。
也许你可以尝试修改彗星(https://en.wikipedia.org/wiki/Comet_(programming))协议来找到出路