SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(四)——总体结构设计(服务器端)

    SharpStreaming项目包含两个子项目,分别为SharpStreamingServer和SharpStreamingClient,按照通常的做法是对每一个项目做分别的开发,待项目开发完毕后才最后集成。很显然,这种方式似乎并不适合于本项目的开发,因为服务器与客户端本来就应该是配套的,两者是紧密结合的。因此,在构建服务器的基本框架的同时,也必须构建客户端的基本框架,并能够使两者很好地集成起来。这样无论是对服务器还是对客户端的进一步开发和调试都能够顺利进行,可以进一步确保每一个服务器和客户端的版本都是可用的。

    本篇文章及后面一篇文章将重点介绍本项目的总体结构设计,不仅仅是基本的服务器和客户端,而是从全局的角度来对本项目做总体结构的设计。本章将介绍服务器端的总体结构设计,在下一篇文章中将介绍客户端的总体结构设计。

    首先,抛开服务器的性能等相关方面不说,服务器其实就是一个不断接受客户端请求并处理客户端请求的应用程序。服务器通过网络与客户端进行数据交互,每一个客户端对服务器而言就是一个会话,所以服务器就是由很多客户端会话组成的一个集合,每一个客户端会话独立处理属于自己的事情,比如从本地文件读取文件数据块并通过网络发送出去,至于采用什么样的方式发送和接收数据,就涉及到传输协议了。

    另一方面,从用户体验的角度出发,给服务器构建一个用户界面,将使服务器的可操作性大大增强。因此,服务器初步划分为两大部分,即服务器UI部分和服务器核心部分,更确切地说,构建一个SharpStreamingServer解决方案,该方案包含两个项目,分别为SharpStreamingServer.UI(Windows窗体应用程序)和SharpStreamingServer.Core(类库),前者负责处理与用户的交互等工作,后者处理服务器的后台工作(如侦听客户端连接、接收和发送数据等)。

    下面是服务器部分的思维导图:

    先来看服务器UI处理部分,该部分(项目)其实从概念上来讲,可以划分为两个层次:一是UI展现层,二是UI处理层。UI展现层将各种数据展现到用户面前,如可供用户操作的各种按钮(启动服务器、停止服务器、设置等)、服务器的运行信息或已连接客户端的基本信息等。UI处理层是UI展现层与服务器核心部分交互的桥梁,服务器核心部分的数据是以事件的方式反馈回给UI处理层的,UI处理层经过处理后再将其通过UI展现层展现出来。

    再看服务器的核心处理部分,该部分大致由几大块组成:RtspServer类、Socket处理类、Session处理类、文件处理类、事件处理类、公共或工具类、RTP/RTCP处理类,此外还可能有一些未知的类。RtspServer类是核心类,负责服务器的启动、停止等相关操作,是与UI部分交互的窗口。Socket处理类包括ServerSocket(负责侦听客户端连接请求)和ClientSocket(以异步方式接收和发送数据)。Session处理类包括ClientSession和MediaSession,初步构想是每一个ClientSession对应一个MediaSession。文件处理类主要是从服务器本地读取指定文件数据块。RTP/RTCP处理类包括了对RTP数据包的组包等,在这一块目前还存在一些模糊的地方,需要在后面进行深入研究。

    此外,随着服务器的深入开发,后面还可能会陆续加入一些目前未知的类。

    在本项目中,有Source和Sink的概念(这两个概念源于Live555开源项目),Source代表来源数据,Sink代表消费数据。如FileSource代表的是从文件读取文件数据块,而RTPSink代表的是消费文件数据块;因此这种联系也就非常明确了,FileSource不断地读取数据,之后交给RTPSink,RTPSink再通过网络发送出去(消费)。

    总体而言,服务器基本可以根据上述的思维导图进行项目工程的构建了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏雪无痕大黄蜂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值