2009-06-24 118 views
0

我在撰写将发布和订阅主题的客户端/服务器应用程序。 我对这个项目的体系结构和实现有几个问题。撰写主题发布/订阅系统

首先设置基础我将使用c#(.NET 3.5),我想明确地使用原始套接字/ AIO /线程(起初没有WCF,因为我想根据需要微调服务器和客户端) 。客户主要订阅主题,但偶尔会向服务器发送命令,甚至发布数据。有些客户也可能只是发布商。

  1. 那你觉得应该是我的服务器的 基本构建块(每个客户端 线程,IOCP,....)。

  2. 如果客户端使用相同的 的NetworkStream听订阅 主题和发送命令/发布到 服务器?如何等待数据和 同时向 写入数据流,应该在 的同一线程中完成?

(示例代码可以理解:))

+0

为什么要重新发明轮子?为什么不使用MSMQ(`System.Messaging`)?或者[CodeMesh](http://www.codemesh.com/products/jmscourier/examples/topic_pub_cs.html)? 不要吝啬鬼......我只问这个问题的原因是这个问题空间是通过很多产品很好地探索的,而且这个方法有很多难以解决的OOTB问题。 – cwash 2009-06-24 16:26:26

+0

您好cwash,我同意这些应用程序可能实际上实现了我的目标,但我更喜欢看低层次的图片来了解内部,并知道如何调整我的应用程序,并能够看看几个设计的正反面。此外,我的应用程序需要能够订阅一些主题,但不是全部。我还需要能够创建某种本地代理来节省带宽并共享许多本地应用程序的内存。 – Dave 2009-06-24 19:14:59

回答

0
  1. 我会用异步插座尽可能的,因为它会消除需要你管理你自己的线程池的请求处理。

  2. 客户端应该使用两个流 - 一个用于列表,另一个用于发送。这将大大简化客户端和服务器端的事情。同样,使用异步套接字来避免管理多个线程。

只要确保小心管理异步回调所使用的共享资源的锁定。如果可能,尽可能避免共享资源。对于任何应用程序来说,Managine并发访问通常是最糟糕的部分。

0

你有没有签出ActiveMQ?我相信它已经做了主题,C#有能力通过他们的NMS API与它交谈。