design-patterns - 模式 - 始终由同一方发起的通信

标签 design-patterns

我需要帮助为我正在开发的应用程序的一部分找到有效的模式。

每个用户都有一个称为网关的设备。网关。这些网关通过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/

相关文章:

c# - 将 SqlDataType 转换为 C# 枚举

c++ - 使用shared_ptr处理可靠的命令模式

c# - 如何将文本文件大纲列表转换为对象的递归集合?

php - 根据子类在父类中包含类

java - 避免许多 if 语句,代码改进

spring - 如何从单例中生成原型(prototype)对象? (需要设计帮助)

c# - 可选参数是否应该列在构造函数签名中?

java - 面向方面编程中的四人组模式用法?

design-patterns - 对命令模式感到困惑

.net - 如何在继承自另一个一次性类的类中实现一次性模式?