- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高性的能并发网络服务器设计与实现 1
高性能并发网络服务器设计与实现 / 网络服务器开发 协议设计(网络协议和应用协议) 语法(报文格式) 语义(指令的处理, 交互时序等) 只要涉及到交互(即使不是网络交互), 就需要协议 网络实现(IO) 网络开发的基础是socket 任何对网络的封装, 在三度关系之内必然是socket(最多三层封装) 第一节 – 网络IO Talk is cheap, show me the code serv = new TcpSocket(); serv.listen(); sock = serv.accept(); sock.read(buf); sock.write(buf); sock.close() 一次服务 没有并发 短连接 有没有协议? 最简单的TCP服务器 重复服务 socket IO read/write是可阻塞的 阻塞是并发和高性能的死敌 实现并发和高性能的途径就是解阻塞 太简单了! 后面继续讲解read/write... 并发服务 优缺点 优点: 简单易用, 一般工作得很好 多线程, 可以利用CPU多核 缺点: 启动线程也有成本, 很可能占大头 线程的数量不受控制, 危险! 问题在于IO... IO多路复用 专业地解决一个问题 select/poll/epoll/kqueue的API几乎一样, 实现不同, 性能不同 IO多路复用接口的作用, 就是测试accept/read/write等IO调用会不会阻塞 IO多路复用示例 serv = new TcpSocket(); serv.listen(); select.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 为空, 因为我们不测试可写 } 还不完善 第二节 – 报文解析 报文设计 最重要的TCP协议是流式协议, 但几乎所有的应用协议都是基于报文的协议 报文分隔 用连接关闭来表示报文结束. 如, HTTP/1.0的响应 固定长度的报文. 如, TFTP的数据报文. 带自描述长度的固定长度首部的变长报文. 如IP包, TCP分段. 带结束符. 如, 行协议, HTTP协议. 逐字节解析和数据转义的影响. 高层 文本, 带结束符 底层 二进制, 固定长度 SSDB的报文格式 Packet := Block+ \n Block := Size Data Size := literal_integer \n Data := size_bytes_of_data \n 示例: 3 get 3 key 回车 优点 简单 带长度字段, 支持二进制数据 同时对人和对机器友好, 报文数据文本化效果好. 可以telnet到服务器进行交互 解析器非常简单, PHP代码不过几十行 同时兼容LF和CRLF(惯例) socket io 2 read/write读取/发送的是字节数组. C语言的char[], PHP的string read返回时读取的准确字节数无法预计 导致粘包, 断包 write返回时不表示数据已到达对方机器 所以, 即便基于可靠传输的TCP协议, 也需要应用层协议进行确认来保证真正意义上的可靠 带有报文解析的服务器 serv = new TcpSocket(); serv.listen(); sock = serv.accept(); client = new Client(sock); client.recv(packet); client.send(packet); client.close() packet一般是编程语言中的对象 序列化和反序列化 read收到的是字节数组, 要进行反序列化转成编程语言的对象 反序列化的过程就是报文解析 解析报文 bytes = []; while(1){ bytes += sock.read(); if(try_parse(bytes, len) == READY){ // 已经解析出了一个报文, 报文的长度是len // 从字节数组中清除掉已解析的 bytes.remove(len); }
您可能关注的文档
- 东风日产—市场部工作.ppt
- 东海的啤酒金色麦田社区营销方案.ppt
- 动媒广告媒体介绍【东莞东&贵广线】0105 (4).pptx
- 豆瓣的网运营模式分析.ppt
- 豆瓣的网运营模式分析1.ppt
- 对外的汉语教学教案.ppt
- 多主体财务关系下的税务管理.ppt
- 儿童主题商业.ppt.ppt
- 二轮政治专题3主体篇.ppt
- 二维码基础qr码进阶.ppt
- 小学科学:ESP8266智能插座电路原理与动手实践研究教学研究课题报告.docx
- 《金融开放浪潮下我国多层次监管体系构建与创新研究》教学研究课题报告.docx
- 区域教育质量监测中人工智能应用的数据质量分析与优化策略教学研究课题报告.docx
- 《金融科技监管中的数据治理与合规性要求》教学研究课题报告.docx
- 《3D打印技术在航空航天领域中的多材料制造与复合材料应用》教学研究课题报告.docx
- 《绿色金融发展中的政府职能与市场机制研究》教学研究课题报告.docx
- 《植物工厂多层立体栽培光环境调控技术对植物生长发育节律的调控机制探讨》教学研究课题报告.docx
- 销售团队年度业绩总结.docx
- 银行风险管理与金融危机防范.docx
- 银行网络攻击预警与快速响应机制.docx
文档评论(0)