您是如何构建面向网络的应用程序的?

我正在开始设计一个主要面向网络的新应用程序,我正在寻找那些提出了良好的架构设计或OOP类模型的人的建议。

请描述基本架构和/或类结构。 你抽出了通信位吗? 你想出了哪些类实体?

该应用程序将同时具有监听器和客户端类。 它类似于feed聚合器,但使用持久连接而不是HTTP。 换句话说,我连接到套接字并具有持久连接,其中数据以双向方式流动。 然后我也有持久连接到我的客户端,我将一些(或全部)数据发送给他们。

此外,我不能使用WCF或.NET 3.0或3.5中的任何东西(虽然我可以使用C#3,因为我正在开发VS2008)。 我必须与Windows 2000兼容。

我是几周前开始撰写的客户端 – 服务器应用程序的尾端。 我使用WCF作为.Net客户端和服务器。

但是服务器还必须连接到网络上只能通过TCP / IP理解ASCII的设备。

你抽出了通信位吗?

是。 我猜。 我的意思是,我不确定我100%理解你的问题。 对于我与第三方设备的TCP连接,我隐藏了我编写的类后面的TCP连接和通信的详细信息。 该设备将ASCII命令转换为IR信号,以控制卫星天线和DVD播放器等。 我将TCP通信抽象为一个类,所以我的服务器所要做的就是调用:

_irService.SendCommand(someAsciiCommand); 

你想出了哪些类实体?

它们基于我的域名。 你的应该基于你的域名。 我不确定我是否理解那个问题。 您的域将决定您的对象。

在我的域中,我正在处理一个服务器应用程序,该应用程序负责使用VLC通过UDP调度和播放多播广播。 这些多播广播必须在每个方面都是可配置的。

当我分析域名时,我想出了一个由广播,频道,设备和BroadcastProcesses组成的模型(一个负责启动vlc.exe进程并维护其生命周期的类)。

该域对网络技术影响不大。 我最终在WCF中使用了一些双工“服务”,允许我操作域。 但网络选择不是由域名决定的。 我想要一个带有对象二进制序列化的TCP连接,我想与服务器进行双向通信,这样我的客户就可以通过回调获得实时更新。 无论我的域名是什么样的,我都可以使用这些选项。

“网络应用”是一个不明确的类别,涵盖了广泛的可能要求和设计。 根据定义,您将不得不处理并发和延迟。 稳健性始终是一项挑战:设计一个系统,其可用性是其所有硬件和软件组件的最低标准是非常容易的。 您将不得不升级应用程序的操作系统和组件:您是否能够解决所有解决方案,或者您需要一些热/冷待机甚至故障转移function? 网络以异乎寻常的方式失败(至少对我们糟糕的纯软件人员来说):你依赖于许多你从未考虑过的东西(路由器,交换机,DNS服务器,那个胡子网络工程师在走廊里的脾气!),并且应该设计与悲观的心境相互作用。

一个警告:在设计分布式应用程序时不要过于面向对象。 对象在管理软件复杂性方面占有一席之地,但是当你开始在线上推送它们时,大量的性能和版本依赖性问题会引起他们丑陋的头脑。 面向服务的体系结构是一个流行语,但在某种程度上作为设计原则是有用的。 大型机家伙已经知道这个年龄了…

两本一般书籍建议:

  • 使用UML设计并发,分布式和实时应用程序已有几年历史了,但它带来了您可能面临的挑战(特别是如果您真的在某处有硬或软实时依赖性)。 有点理论,但有助于灌输一定程度的复杂性!
  • 企业集成模式系统地介绍了可用于集成新旧组件的不同设计选项。