当前位置: 首页> 汽车> 车展 > wap网站建设公司_辽宁建设工程信息网注册流程_惠州seo代理商_企业网站营销优缺点

wap网站建设公司_辽宁建设工程信息网注册流程_惠州seo代理商_企业网站营销优缺点

时间:2025/7/28 23:44:08来源:https://blog.csdn.net/chang765721/article/details/144747335 浏览次数: 0次
wap网站建设公司_辽宁建设工程信息网注册流程_惠州seo代理商_企业网站营销优缺点

背景知识

Socket

套接字。 客户端和服务端通信时,客户端需要数据出口,服务端需要数据入口,这两个出入口就是Socket。数据接收方新建socket后需要绑定ip和端口号,这样客户端才能链接上socket。连接的过程就是 三次握手

FD file descriptor

文件描述符。linux中有 一切皆文件的说法。这个FD可以理解成文件的索引。Socket 同样也是一种资源,也会对应一个FD。

再来说一下数据读取和写入:
首先,socket的操作都是在内核空间去做的。
其次,服务器通过网卡接收数据,接收到的数据会放在内核空间, 也就是socket缓冲区,此时处理逻辑的程序是无法操作这部分数据,所以内核空间封装read和write函数 供用户空间使用。
最终,数据处理需要在用户空间操作。

IO模型

假设你是一个老师(服务端)正在收作业,学生(客户端)做完作业后即可收上来

  1. 同步阻塞:逐个收作业,先A再BCD,如果A还没做完,你会等待,指导A完成才能继续收B的作业。
  2. 同步非阻塞:逐个收作业,先A再BCD,如果A还没做完,你会跳过等待,继续收B的作业。
  3. select poll:你不去主动收作业,学生做完后会通知你,但是你不知道谁完成了,只是知道有人完成了,只能挨个问
  4. epoll:学生写完后,回告诉你谁写完了,你直接去收作业。

同步阻塞

sever1. 新建socket   listen_fd = socket(domian,type,protocol)2. 绑定端口.     bind(listen_fd,addr,addlen)3. 开启监听.     listen(listen_fd)4. 执行while(true){// 建立连接accept_fd = accept(listen_fd,addr,addlen);// 接收数据read(accept_fd,buf,nbyte)// 处理logicHandle(buf);}client11. 新建socket   fd = socket(domian,type,protocol)2. 建立连接。   connect(fd,serv_addr,addlen)3. 写数据。     write(fd,buf,nbyte)
client21. 新建socket   fd = socket(domian,type,protocol)2. 建立连接。   connect(fd,serv_addr,addlen)3. 写数据。     write(fd,buf,nbyte)

服务端在和其中一个客户端建立连接、接收数据、处理逻辑阶段都是阻塞的,别的客户端连接不进来。

同步非阻塞

severwhile(true){// 设置为非阻塞setNonbblocking(fd)// 建立连接accept_fd = accept(listen_fd,addr,addlen);if(accept_fd > 0){fd_list.add(accept_fd)}
client11. 新建socket    fd = socket(domian,type,protocol)2. 建立连接。   connect(fd,serv_addr,addlen)3. 写数据。     write(fd,buf,nbyte)

服务端在和其中一个客户端建立连接、接收数据、处理逻辑阶段都是非阻塞的。如果当个某个客户端没有就绪,就直接下一次遍历。

关键字:wap网站建设公司_辽宁建设工程信息网注册流程_惠州seo代理商_企业网站营销优缺点

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: