【问题标题】:Writing a topic pub/sub system编写主题发布/订阅系统
【发布时间】:2009-06-24 15:58:58
【问题描述】:

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

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

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

  2. 客户是否应该使用相同的 NetworkStream 监听订阅 主题并发送命令/发布到 服务器?如何等待数据和 同时将数据写入 流,这应该在 同一个线程?

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

【问题讨论】:

  • 为什么要重新发明轮子?为什么不使用 MSMQ (System.Messaging)?或者像CodeMesh这样的东西?不要故意拖钓...我问的唯一原因是,这个问题空间已经通过很多产品得到了很好的探索,并且有很多难题可以通过这种方法为您的 OOTB 解决。
  • 嗨 cwash ,我同意这些应用程序实际上可以实现我的目标,但我更喜欢看底层图片以了解内部结构并知道如何调整我的应用程序并能够查看专业人士和几种设计的缺点。此外,我的应用程序需要能够订阅一些主题,但不是全部。我还需要能够创建某种本地代理来节省带宽并在许多本地应用程序之间共享内存。

标签: c# networking asynchronous


【解决方案1】:
  1. 我会尽可能多地使用异步套接字,因为这样您就无需管理自己的线程池来处理请求。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的,它已经提供了这种服务,但我想了解更多并了解编写高效且可扩展的网络服务器的内部。
    猜你喜欢
    • 2017-05-07
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 2011-11-03
    • 1970-01-01
    相关资源
    最近更新 更多