C# 编写主题发布/订阅系统

C# 编写主题发布/订阅系统,c#,networking,asynchronous,C#,Networking,Asynchronous,我正在编写一个客户机/服务器应用程序,它将发布和订阅主题。 我对这个项目的架构和实现没有什么疑问 首先,我将使用c#(.NET3.5)来设置basis,并且我希望显式地使用原始套接字/AIO/线程(起初没有WCF,因为我确实希望根据需要微调服务器和客户端)。客户端大多订阅主题,但偶尔也会向服务器发送命令,甚至发布数据。有些客户可能也是出版商 你认为应该是什么 我的服务器的基本构建块( 每个客户端的线程数,iocp,…) 客户是否应该使用相同的方法 要侦听的网络流已订阅 主题并将命令/发布发送到

我正在编写一个客户机/服务器应用程序,它将发布和订阅主题。 我对这个项目的架构和实现没有什么疑问

首先,我将使用c#(.NET3.5)来设置basis,并且我希望显式地使用原始套接字/AIO/线程(起初没有WCF,因为我确实希望根据需要微调服务器和客户端)。客户端大多订阅主题,但偶尔也会向服务器发送命令,甚至发布数据。有些客户可能也是出版商

  • 你认为应该是什么 我的服务器的基本构建块( 每个客户端的线程数,iocp,…)

  • 客户是否应该使用相同的方法 要侦听的网络流已订阅 主题并将命令/发布发送到 服务器?如何等待数据和 同时将数据写入 流,是否应该在 同一条线

  • (示例代码将不胜感激:))

  • 我将尽可能多地使用异步套接字,因为它将消除您管理自己的线程池以进行请求处理的需要

  • 客户端应该使用两个流——一个用于列表,另一个用于发送。这将大大简化客户端和服务器端的工作。同样,使用异步套接字可以避免管理多个线程


  • 只要确保小心管理异步回调使用的共享资源的锁定。如果可能的话,尽量避免共享资源。管理对事物的并发访问通常是此类应用程序中最糟糕的部分。

    您签出ActiveMQ了吗?我相信它已经有了主题,C#有能力通过他们的NMS API与它对话。

    为什么要重新发明轮子?为什么不使用MSMQ(
    System.Messaging
    )?还是什么?我不是故意的。。。我问这个问题的唯一原因是,这个问题空间已经通过很多产品得到了很好的探索,并且有很多困难的问题可以通过这种方法为您的OOTB解决,我同意这些应用程序可能真的实现了我的目标,但我更喜欢看低层次的图片来了解其内部结构,知道如何调整我的应用程序,并能够看到几种设计的优缺点。此外,我的应用程序需要能够订阅一些主题,但不是所有主题。我还需要能够创建某种本地代理,以节省带宽和共享许多本地应用程序的内存。是的,它已经提供了这种服务,但我想了解更多信息,了解编写高效、可扩展的网络服务器的内部原理。