windows套接字编程学习笔记

目录

定义

1.重叠IO

2.完成端口

3.Accept(Ex)

4.WSARecv

知识体系

1.通过完成端口接收并处理网络请求


定义

1.重叠IO

重叠IO实际上就是一种异步IO,在写入IO的时候不需要进行等待。

参考:为什么叫做重叠端口?

2.完成端口

完成端口并不是实际上的一个机器端口,而是在实际套接字绑定端口接收到消息后的一种缓存机制,这种缓存机制的效率比较高。

创建方式:

HANDLE m_hIOCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0 );

参考:完成端口(CompletionPort)详解

3.Accept(Ex)

服务器在建立套接字并在端口上进行监听以后,这个时候如果来了一个请求,就需要有对应的处理。怎么来表示来了一个请求并触发对应的操作呢?这个时候就需要这个Accept(Ex)了。accept是先出现的,专门用来等待请求,等不到就不走。后来为了提高吞吐量,Windows在WinSock2中搞了个AcceptEx,这个函数用了完成端口(暂时理解为一个缓冲消息队列),调用完这个AcceptEx接口以后,这个函数会将备用套接字(用于表示远端地址)及所谓重叠IO结构体放到完成端口上,然后立刻返回。完成端口在接收到接入请求以后就填充传入的套接字以及数据,完成后唤醒工作线程中等待在完成端口的所谓工作线程,工作线程利用完成端口传入的数据进行程序设计者需要的操作。

参考:​​​​​​accept函数详解_涛歌依旧的博客-CSDN博客_accept函数

accept与三次握手的关系_努力织网的博客-CSDN博客_accept 三次握手

4.WSARecv

WSARecv并不是说从发送来的消息中获取消息题,而是向完成端口中发送一个接收消息的容器,如果有消息来了则windows内核会将消息填充并唤醒在完成端口监听的工作线程。一下为参考的一个博客,评论是精华。由此可知完成端口的真实含义和异步请求的操作流程:1、发送请求容器;2、请求得到满足,请求容器被填满;3、唤醒在完成端口监听的工作线程。

参考:完成端口WSARecv作用分析-CSDN论坛

知识体系

1.通过完成端口接收并处理网络请求

通过完成端口接收并处理网络请求总体的结构:

1)网络套接字从网络接收到信息;

2)网络套接字将信息发送到完成端口;

3)工作线程实时监控完成端口,在发现有数据后立刻取出并处理;

 以上为网络消息的大致处理流程。这个看上去不就是线程池嘛,这个线程池是在内核中实现,所以能避免频繁与内核打交道而导致的效率损耗。为何不在收到网络消息后立刻处理在用户缓存中,通过条件变量来控制线程池的处理呢?我想可能是在使用条件变量时会进行锁操作,而使用完成端口,从网络到最终的完成端口发送消息全部在内核完成,不用切换模式,效率较高的原因。

将来可以对Linux系统中的多路转接对比,详细研究两者差别。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾昵猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值