高性能并发网络服务器设计与实现ppt课件

上传人:cl****1 文档编号:591336741 上传时间:2024-09-17 格式:PPT 页数:24 大小:120KB
返回 下载 相关 举报
高性能并发网络服务器设计与实现ppt课件_第1页
第1页 / 共24页
高性能并发网络服务器设计与实现ppt课件_第2页
第2页 / 共24页
高性能并发网络服务器设计与实现ppt课件_第3页
第3页 / 共24页
高性能并发网络服务器设计与实现ppt课件_第4页
第4页 / 共24页
高性能并发网络服务器设计与实现ppt课件_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《高性能并发网络服务器设计与实现ppt课件》由会员分享,可在线阅读,更多相关《高性能并发网络服务器设计与实现ppt课件(24页珍藏版)》请在金锄头文库上搜索。

1、高性能并发网络效力器设计与实现 交互时序等)p只需涉及到交互(即使不是网络交互), 就需求协议p网络实现(IO)p网络开发的根底是socketp任何对网络的封装, 在三度关系之内必然是socket(最多三层封装)第一节 网络IOTalk is cheap, show me the codeserv = new TcpSocket();serv.listen();sock = serv.accept();sock.read(buf);sock.write(buf);sock.close() 一次效力 没有并发 短衔接 有没有协议?p最简单的TCP效力器反复效力serv = new TcpSock

2、et();serv.listen();while(1) sock = serv.accept();while(1)/反复效力单用户 sock.read(buf); sock.write(buf); sock.close() 一次效力 没有并发 短衔接socket IOpread/write是可阻塞的p阻塞是并发和高性能的死敌p实现并发和高性能的途径就是解阻塞p太简单了!p后面继续讲解read/write.并发效力serv = new TcpSocket();serv.listen();while(1) sock = serv.accept(); new Thread() while(1)/反复

3、效力单用户 sock.read(buf); sock.write(buf); sock.close() 一次效力 没有并发 短衔接优缺陷p优点:p简单易用, 普通任务得很好p多线程, 可以利用CPU多核p缺陷:p启动线程也有本钱, 很能够占大头p线程的数量不受控制, 危险!p问题在于IO.IO多路复用p专业地处理一个问题pselect/poll/epoll/kqueue的API几乎一样, 实现不同, 性能不同pIO多路复用接口的作用, 就是测试accept/read/write等IO调用会不会阻塞IO多路复用例如serv = new TcpSocket(); serv.listen();sel

4、ect.add(serv, READ); / READ 表示只测试可读(读不阻塞)while(1) readable, writable = select.wait(); foreach(readable as sock) if(sock = serv) sock = serv.accept(); select.add(sock, READ); else sock.read(buf); sock.write(buf); sock.close(); / writable 为空, 由于我们不测试可写还不完善pwrite也能够阻塞, 修正.psock.read(buf);psock.write(bu

5、f); sock.close();pselect.add(sock, WRITE);pforeach(writable as sock)p sock.write(buf);p sock.close();p第二节 报文解析报文设计p最重要的TCP协议是流式协议, 但几乎一切的运用协议都是基于报文的协议p报文分隔p用衔接封锁来表示报文终了. 如, /1.0的呼应p固定长度的报文. 如, TFTP的数据报文.p带自描画长度的固定长度首部的变长报文. 如IP包, TCP分段.p带终了符. 如, 行协议, HTTP协议. 逐字节解析和数据本义的影响.高层文本, 带终了符底层二进制, 固定长度SSDB的报

6、文格式Packet := Block+ nBlock := Size DataSize := literal_integer nData := size_bytes_of_data n例如:3get3key优点p简单p带长度字段, 支持二进制数据p同时对人和对机器友好, 报文数据文本化效果好. 可以telnet到效力器进展交互p解析器非常简单, PHP代码不过几十行p同时兼容LF和CRLF(惯例)socket io 2pread/write读取/发送的是字节数组. C言语的char, PHP的stringpread前往时读取的准确字节数无法估计p导致粘包, 断包pwrite前往时不表示数据已到

7、达对方机器p所以, 即使基于可靠传输的TCP协议, 也需求运用层协议进展确认来保证真正意义上的可靠带有报文解析的效力器serv = new TcpSocket();serv.listen();sock = serv.accept();client = new Client(sock);client.recv(packet);client.send(packet);client.close()ppacket普通是编程言语中的对象序列化和反序列化pread收到的是字节数组, 要进展反序列化转成编程言语的对象p反序列化的过程就是报文解析解析报文bytes = ;while(1) bytes += s

8、ock.read(); if(try_parse(bytes, &len) = READY) / 曾经解析出了一个报文, 报文的长度是len / 从字节数组中去除掉已解析的 bytes.remove(len); 整合网络IO和报文解析p将上例中的read和try_parse分别p作业.第三节 业务处置p网络效力器 = 协议处置 + 网络IO + 业务处置业务处置的位置serv = new TcpSocket();serv.listen();sock = serv.accept();client = new Client(sock);request = client.recv();response = process(request);client.send(response);client.close()对于SSDB, LevelDB 相关的操作封装在 process 中.剩下的.p就是看代码写代码.FINThanksSSDB: httpsgithub/ideawu/ssdb

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号