网络编程
来源:互联网 发布:青峰网络招聘 编辑:程序博客网 时间:2024/05/22 15:43
宏哥分享的大作,不分享出来,就埋没了
本次分享主要针对TCP协议,不涉及UDP等其他网络协议。
网络编程的核心接口------》建立连接,数据收发
客户端使用connect发起连接,服务器端使用listen监听和accept建立连接。图里面少了一个重要的函数,socket——创建套接字,两边都要使用。
连接过程:backlog,在连接建立完成之前的连接请求的个数,超过这个数值,则连接请求被拒绝
数据收发过程:每个已连接的socket都有一个对应的发送缓冲区和接收缓冲区,当发送缓冲区满时,发送请求会被阻塞,当接收缓冲区空时,接收请求会被阻塞。阻塞会引起线程/进程的切换,影响系统的整体的性能。可以使用select、pool、epool来统一控制I/O,从而模拟一种非阻塞的模型,
只有发送缓冲区有空余和接收缓冲区有数据时,才进行数据的收发,使得业务线程不会因为网络I/O而发生阻塞。
阻塞并不一定总比非阻塞低效,因为阻塞实际上是释放了处理器资源。因此如果并发的线程/进程比较多,临界区比较大的话,非阻塞机制会使得非工作的进程也争抢CPU时间片。
信号是Unix系统提供的机制,可以理解为软中断。可以用于进程间发送通知。
服务端和客户端的高效的编程模式。
服务端:使用非阻塞I/O,实现业务逻辑和I/O的解耦,提升服务的效率。
I/O模式:Reactor和Proactor,Proactor的模式会更高效一些。
要慎重选择等待队列的大小,以免请求被无理的拒绝或者造成无谓的服务延迟。
RPC的核心是数据的跨平台的解析-》序列化与反序列话,一个统一的中间语言IDL至关重要。
为什么要Thrift与Protobuf?
RPC不可避免的需要序列化与反序列化工作,这种工作简单但是繁琐,不仅每个字段都要进行,而且要注意处理网络序和主机序。
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 【转】Android之自定义Adapter的ListView
- base64编码函数
- HD2044 一只小蜜蜂...
- 基础_IO流学习笔记_文本文件读取及复制、字符流的缓冲区和装饰设计模式
- JDeveloper 小技巧
- 网络编程
- redis hash数据占用内存测试
- LeetCode OJ算法题(三十八):Combination Sum
- Android中实现组件之间的分割线-Android Divider
- java笔记-面向对象-多态
- IDOC 打包发送
- 501位图bitmap
- Android图像开源视图:SmartImageView
- 美素数【杭电-4548】 附题