.net internet上基于客户端/服务器消息的体系结构 问题
一段时间以来,我一直在思考基于消息的体系结构的复杂性,当消息传递的渠道之一包括互联网时 我很赞成在客户机上对消息进行排队的概念,当处理这些消息时,会导致通过internet进行web服务调用,然后在服务器上对这些消息进行排队,以便根据业务规则进行处理。我目前不知道的是一种机制,它可以将消息发送回客户机,告诉客户机发生了什么事情 榜样 在本例中,考虑一个桌面仓库管理应用程序,该应用程序希望从服务器接收消息,而不是轮询以查看是否有消息 例如.net internet上基于客户端/服务器消息的体系结构 问题,.net,architecture,messaging,.net,Architecture,Messaging,一段时间以来,我一直在思考基于消息的体系结构的复杂性,当消息传递的渠道之一包括互联网时 我很赞成在客户机上对消息进行排队的概念,当处理这些消息时,会导致通过internet进行web服务调用,然后在服务器上对这些消息进行排队,以便根据业务规则进行处理。我目前不知道的是一种机制,它可以将消息发送回客户机,告诉客户机发生了什么事情 榜样 在本例中,考虑一个桌面仓库管理应用程序,该应用程序希望从服务器接收消息,而不是轮询以查看是否有消息 例如 用户通过严格的SLA在网站上创建紧急订单,以便在几分钟内进
OrderCreated
消息将在服务器上发布OrderCreated
消息发送到仓库中PC上运行的客户端软件。非常感谢。也许在之后再做些什么(或者干脆为现有的.net服务器构建一个JMS适配器,然后直接使用JMS)?与中一样,您可以让客户端保持与通知服务器的持久套接字连接(如果您考虑一分钟轮询服务器几次,那么为什么不保持套接字打开?)。建立套接字后,连接客户端可以订阅/注册它感兴趣接收的任何事件(例如,“我只想要与仓库A中的产品相关联的事件”)。然后,当服务器上发布
OrderCreated
消息时,服务器可以查看其客户机列表以查看谁注册了该消息,并立即通过相应的套接字连接向客户机发送通知 是我以前(3或4年前)用来创建即时消息程序的一段短代码片段。它创建一个可以接受来自服务器的消息的TcpListener
,以及一个NetworkStream
和TcpClient
向服务器发送消息。这可能不是一个完整的答案,但它可能有助于指导您。我将使用使用TCP和回调的WCF服务
你为什么说它不可伸缩?我在自动化领域有很多经验,我认为轮询和双向通信是最常见的 在这两者中,我一直更喜欢双向通信。它确实可以很好地扩展到某一点——只要服务器使用异步API(特别是不使用“每个连接一个线程”的设计),就可以实现数万个套接字/WCF连接 轮询方法确实会产生更多不必要的网络通信量,但如果扩展到单个服务器,可能会更好。在我看来,使用现有技术可以相当容易地扩展到web场,如果使用轮询方法,这种扩展(我认为)会更容易。不过,我从来没有这么大的规模
我没有使用MSMQ进行这种类型的通信,但使用了IBM的WebSphere(一种类似的技术)。消息队列有其自身的一系列自动化问题,如处理死信队列等。如果您希望服务器停机一段时间(或者如果您在客户端和服务器之间有不可靠的“中间件”),消息队列非常有用,但总的来说,我更喜欢双向通信,而不是套接字或WCF。我目前正在做一件非常类似的事情,即信息需要通过互联网及时传递到DSL路由器/调制解调器后面的客户端软件,并可能绑定到动态IP地址。频繁轮询是我们选择的解决方案,它在性能和简单性之间取得了平衡。请看一看-它还没有出现,但它打算成为/long poll技术的继承者。它是为web浏览器而设计的,但没有理由不能在其他类型的客户端中使用。我想让客户端软件的每个实例都保持一个通过防火墙打开的到web服务器的永久套接字连接是不可取的。那么,这不太可能是个问题吗?我不能说你的防火墙会如何处理这个问题。查阅手册;)