我正在开发一个新的客户端 - 服务器应用程序(.Net),到目前为止一直在使用WCF,它非常适合应用程序的请求 - 响应方法.但是我被要求用基于套接字的解决方案替换它,部分是为了支持非.Net客户端,以及未来的pub-sub/broadcast要求(我意识到WCF是有能力的,但是决定背后还有其他驱动因素).在编写我自己的异步套接字解决方案时惨遭失败,我现在正在关注ZeroMQ.
我的客户端应用程序有几个后台线程,定期从服务器请求数据.另外,某些UI动作(例如按钮点击)可以触发到服务器的消息.WCF使这很容易 - 代码简单地称为单独的WCF服务代理上的相关方法(实际上我使用Castle Windsor WCF工具,它给我异步调用功能,但这可能与我的问题无关).
我不太确定这种方法如何转化为ZeroMQ,特别是在管理套接字方面 - 我对ZeroMQ很新,还在阅读指南.我说得对,每个线程都需要一个单独的套接字(即两个b/g线程和UI)?套接字生存期怎么样 - 每次我想发送/接收时(创建效率低下)都创建一个,或者在线程启动时创建套接字并在线程的整个生命周期内重用它?
pyf*_*unc 15
有一点必须非常明确.ZMQ套接字只能连接和与ZMQ套接字通信.
这意味着如果我构建一个分布式应用程序,其组件相互通信,我可以自由选择任何通信方法,因为外部客户端不会暴露给它.
为这种方法选择ZMQ套接字是个好主意.它允许您立即构建许多通信模式,如req/rep,推/拉,发布/订阅等,并使用ZMQ设备构建更复杂的拓扑.
但是,当涉及外部客户时,不能轻视这种约束.这将强制所有外部客户端使用可能不理想的ZMQ套接字.如果其中一个客户端恰好是使用您的Web服务的浏览器,那么您将需要通过常规客户端提供服务.
您的客户端应用是否使用常规套接字?是否可以重写以使用ZMQ套接字?
如果没有,则不要将ZMQ套接字用于外部接口,而仅用于内部组件通信.
[编辑:附加说明]
ZMQ是套接字的包装器,但它做了一些难以手工完成的事情
然而,将ZMQ误认为是消息传递队列是很常见的.
我最近才学习ZMQ,并且非常乐意使用它.
查看我在ZMQ上的迷你教程,看看你是否有意义使用它:
http://learning-0mq-with-pyzmq.readthedocs.org/en/latest/
| 归档时间: |
|
| 查看次数: |
8182 次 |
| 最近记录: |