Socket多路复用.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Socket多路复用

Linux:C/Socket多路复用select(转) 作一个tcp的服务程序,同时可能有大量的客户端连上来,希望分别记住各个socket 谁有数据过来,就读出来,放到一个请求队列--这些事情用一个线程完成 另外有一个结果队列,如果结果里包含了socket的编号,用一个线程专门: 取出来按编号找回原来发送者socket,发回给原来的客户端 还有一个就是处理线程(池),它取出请求队列里的一个请求,进行处理, 把处理结果放入结果队列 不知道有没有现成的框架? 网上只找到一些很。。。的: /a4/b7112359.html Linux网络编程--9. 服务器模型 作者:hoyt (2001-05-08 11:23:59) 学习过《软件工程》吧.软件工程可是每一个程序员必修的课程啊.如果你没有学习过, 建议你去看一看. 在这一章里面,我们一起来从软件工程的角度学习网络编程的思想.在我们写程序之前, 我们都应该从软件工程的角度规划好我们的软件,这样我们开发软件的效率才会高. 在网络程序里面,一般的来说都是许多客户机对应一个服务器.为了处理客户机的请求, 对服务端的程序就提出了特殊的要求.我们学习一下目前最常用的服务器模型. 循环服务器:循环服务器在同一个时刻只可以响应一个客户端的请求 并发服务器:并发服务器在同一个时刻可以响应多个客户端的请求 9.1 循环服务器:UDP服务器 UDP循环服务器的实现非常简单:UDP服务器每次从套接字上读取一个客户端的请求,处理, 然后将结果返回给客户机. 可以用下面的算法来实现. socket(...); bind(...); while(1) { recvfrom(...); process(...); sendto(...); } 因为UDP是非面向连接的,没有一个客户端可以老是占住服务端. 只要处理过程不是死循环, 服务器对于每一个客户机的请求总是能够满足. 9.2 循环服务器:TCP服务器 TCP循环服务器的实现也不难:TCP服务器接受一个客户端的连接,然后处理,完成了这个客户的所有请求后,断开连接. 算法如下: socket(...); bind(...); listen(...); while(1) { accept(...); while(1) { read(...); process(...); write(...); } close(...); } TCP循环服务器一次只能处理一个客户端的请求.只有在这个客户的所有请求都满足后, 服务器才可以继续后面的请求.这样如果有一个客户端占住服务器不放时,其它的客户机都不能工作了.因此,TCP服务器一般很少用循环服务器模型的. 9.3 并发服务器:TCP服务器 为了弥补循环TCP服务器的缺陷,人们又想出了并发服务器的模型. 并发服务器的思想是每一个客户机的请求并不由服务器直接处理,而是服务器创建一个 子进程来处理. 算法如下: socket(...); bind(...); listen(...); while(1) { accept(...); if(fork(..)==0) { while(1) { read(...); process(...); write(...); } close(...); exit(...); } close(...); } TCP并发服务器可以解决TCP循环服务器客户机独占服务器的情况. 不过也同时带来了一个不小的问题.为了响应客户机的请求,服务器要创建子进程来处理. 而创建子进程是一种非常消耗资源的操作. 9.4 并发服务器:多路复用I/O 为了解决创建子进程带来的系统资源消耗,人们又想出了多路复用I/O模型. 首先介绍一个函数select

您可能关注的文档

文档评论(0)

linsspace + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档