Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 模式-始终由同一方发起的通信_Design Patterns - Fatal编程技术网

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

Design patterns 模式-始终由同一方发起的通信,design-patterns,Design Patterns,我需要帮助为我正在开发的应用程序的一部分找到有效的模式 每个用户都有一个称为网关的设备。这些网关通过网关逻辑与应用程序的在线系统通信。因此,网关逻辑是在线系统的入口点,所有用户的网关都与之连接。此通信通过3G网络完成 有一个限制。由于3G网络上的IP地址频繁变化,网关和网关逻辑之间的通信始终必须由网关启动。问题是数据必须双向传播。数据必须从在线系统到达网关,数据必须从网关到达在线系统。因此,这本质上是双向通信,总是由一个组件,网关启动 我正在考虑通过让GatewayLogic为每个网关维护一个队

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

每个用户都有一个称为网关的设备。这些网关通过网关逻辑与应用程序的在线系统通信。因此,网关逻辑是在线系统的入口点,所有用户的网关都与之连接。此通信通过3G网络完成

有一个限制。由于3G网络上的IP地址频繁变化,网关和网关逻辑之间的通信始终必须由网关启动。问题是数据必须双向传播。数据必须从在线系统到达网关,数据必须从网关到达在线系统。因此,这本质上是双向通信,总是由一个组件,网关启动

我正在考虑通过让GatewayLogic为每个网关维护一个队列来解决这个问题。每个网关定期在GatewayLogic上轮询其队列以获取新数据。但我不确定这个解决方案是否具有足够的可扩展性


我的问题是:有没有一种设计模式可以更有效地解决这个问题

鉴于您不想使用套接字(如果是web应用,则为websocket)或任何其他推送技术,因为您总是希望由网关启动通信,为每个网关设置队列可能是一个很好的解决方案,但如果不限制队列大小,则可能会出现重大问题,特别是如果有太多的网关和连接中断可能会发生

您确定不能使用长轮询或套接字之类的操作吗?通过处理网络更改状态和在IP更改时进行套接字迁移,您可以轻松地处理IP更改


也许您可以尝试修改comet()协议以找到解决方法

不,它不是一个web应用程序。使用3G纯粹是为了让应用程序是PnP,用户只需将网关插入电源插座即可进行设置。这不是标准的请求-响应通信。网关向网关逻辑发送数据,无需任何响应。网关逻辑可以请求特定数据或在网关上发出命令,但问题是只有网关可以启动通信。这就是我在建议的解决方案中引入轮询队列的原因。我认为您的假设(网关逻辑是服务器,网关是客户端)是不正确的。网关不会向GatewayLogic发出请求,它只传递数据。但是,GatewayLogic会向网关发出请求。它可以请求数据并请求网关执行特定操作。因此,在这种情况下,网关是服务器,网关逻辑是客户端。但是有很多服务器,只有服务器可以启动通信。是的,我启动了。为什么?网关逻辑需要向网关发出请求,但只有网关可以启动通信。这就是问题所在。这不是一个标准的web应用程序,当然也不是标准的客户机-服务器体系结构。我确信我不能使用任何其他解决方案。我想我会坚持目前的投票队列