网络应用程序设计

设计要点 

设计Server时需要考虑的因素

响应速度(新建连接时、发送数据时)
运行速度
I/O吞吐量
其它:流量控制(QoS)、安全性
针对特定协议的数据结构
多线程
多进程
单进程

TCP流模式 或 UDP数据报模式
阻塞函数 或 非阻塞函数
同步I/O模式 或 异步I/O模式

 

程序结构

多进程:

在主进程调用accept()函数生成一个新的连接后,调用fork()产生一个子进程对这个新连接进行操作

在主进程结束前需要向所有子进程发中断信号并等待所有子进程执行完毕。

这种程序结构最简单,例子可以参照前面TCP Server的结构和代码

主要应用于各连接操作相互独立的Server,可以保证各连接相互间的数据安全性, 如telnetd、FTPd等。

 

多线程:

基本与多进程结构类似,但是在获得新连接时生成一个线程来对这个连接进行处理。

主要的优点:

线程调度速度快,占用资源少
线程可共享进程空间中的数据

主要应用于各个连接之间关系较紧密的Server,例如:BBS Server

Server的响应速度和I/O吞吐量均较好,是最常用的程序结构。但是在Linux环境下,由于系统用进程来模拟线程,因此程序性能并不比多进程结构强。

 

单线程:

通过select实现非阻塞的同步I/O模式

可以通过调用select函数得出需要读数据并处理的socket集合(也就是Client的集合),然后依次对每个socket读数据,处理并向socket写结果

select得到的socket列表中有一个特殊的socket就是listen函数使用的socket,这个socket需要单独处理,调用accept生成新的socket连接并将这个新socket加入已有的socket集合。

该结构对算法效率要求较高,一般来说响应速度慢,但I/O处理速度最快。适用于连接数少、数据吞吐量大的Server

 

 

设计Server的程序结构

程序结构的考虑

 

网络函数的考虑

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值