window网络客户端----->网络层逻辑1
来源:互联网 发布:平面设计需要的软件 编辑:程序博客网 时间:2024/05/16 07:22
客户端网络开发常见方法:
网络对象从底层分就2种:Acceptor ,Connector.
Acceptor:不断等待外面连接进来,然后创建Connector.
Connector:与外面进行数据传递。
send是否一般知道什么时候去send,但recv我们能难知道数据什么到来。我必须不停recv去检测数据是否到来或者等待网卡告诉我数据来了。如果不停recv或者阻塞recv就卡住当前线程要做别的事情,比喻我们网络逻辑是放UI的线程里面,如果我们不停的recv或者阻塞recv那么就阻塞主UI线程,因为UI线程也要不停的GetMessage做窗口消息分发。网络层基本几种状态无非是 可以发送',可以接收,可以Accept,主要3种,如果我们知道这基本3种状态,那就算我们在UI线程中也难阻塞线程,(只有在很极端情况下阻塞套接字会卡住)。
其实从上面看UI消息调度和网络调度差不多少,所以微软不是提供了 WSAAsyncSelect 把FD_CONNECT,FD_READ 等等融入在一个自定义消息中,当成一个窗口消息,融入在GetMessage的消息循环。
其实我们常说消息无非就是状态,以前一直不明白计算机就是状态机,后面看的书,写的代码多就明白一些了。
感觉万物是不停
在
do
{
switch(state)
{
case xx:
OnXXX();
break;
.........
}
}
while(true)
所以网络层首先的封装就是去封装网络状态机,剩下组包和分包,去触发真正任务层。这个就是基础的网络层封装了吧,剩下基本都是业务,无论是网络高并发还是网络吞吐都是业务,不是网络基础。
所以window下客户端网络常见写法:
1:WSAAsyncSelect---> 把网络状态机丢给UI线程去做。这种适合客户度只有少量几个长连接。所有都是通过服务器一个连接进行发送和接受。
2:线程 + 异步套接字 + select(这个不仅仅代表是select 这个IO函数,代表一类检测方法)-----------》自己组织网络的状态机。
参考vc++源代码:
蘑菇街开源IM(win客户端)
电骡开源代码
Shareaza源代码
windows还是有种就是完成端口进行封装,但好像是状态机丢给内核,应该说起来算是1种吧。
网络对象从底层分就2种:Acceptor ,Connector.
Acceptor:不断等待外面连接进来,然后创建Connector.
Connector:与外面进行数据传递。
send是否一般知道什么时候去send,但recv我们能难知道数据什么到来。我必须不停recv去检测数据是否到来或者等待网卡告诉我数据来了。如果不停recv或者阻塞recv就卡住当前线程要做别的事情,比喻我们网络逻辑是放UI的线程里面,如果我们不停的recv或者阻塞recv那么就阻塞主UI线程,因为UI线程也要不停的GetMessage做窗口消息分发。网络层基本几种状态无非是 可以发送',可以接收,可以Accept,主要3种,如果我们知道这基本3种状态,那就算我们在UI线程中也难阻塞线程,(只有在很极端情况下阻塞套接字会卡住)。
其实从上面看UI消息调度和网络调度差不多少,所以微软不是提供了 WSAAsyncSelect 把FD_CONNECT,FD_READ 等等融入在一个自定义消息中,当成一个窗口消息,融入在GetMessage的消息循环。
其实我们常说消息无非就是状态,以前一直不明白计算机就是状态机,后面看的书,写的代码多就明白一些了。
感觉万物是不停
在
do
{
switch(state)
{
case xx:
OnXXX();
break;
.........
}
}
while(true)
所以网络层首先的封装就是去封装网络状态机,剩下组包和分包,去触发真正任务层。这个就是基础的网络层封装了吧,剩下基本都是业务,无论是网络高并发还是网络吞吐都是业务,不是网络基础。
所以window下客户端网络常见写法:
1:WSAAsyncSelect---> 把网络状态机丢给UI线程去做。这种适合客户度只有少量几个长连接。所有都是通过服务器一个连接进行发送和接受。
2:线程 + 异步套接字 + select(这个不仅仅代表是select 这个IO函数,代表一类检测方法)-----------》自己组织网络的状态机。
参考vc++源代码:
蘑菇街开源IM(win客户端)
电骡开源代码
Shareaza源代码
windows还是有种就是完成端口进行封装,但好像是状态机丢给内核,应该说起来算是1种吧。
0 0
- window网络客户端----->网络层逻辑1
- 网络层-1、网络层功能概述
- 1网络接口层
- 网络层1
- 网络层(1)
- 网络层笔记1
- 网络客户端(1)------连接
- 网络层
- 网络层
- 网络层
- 网络层
- 网络层
- 网络层
- 网络层
- 【网络层】
- 网络层
- 网络层
- 网络层
- APK签名校验绕过
- 浅谈无缓存I/O操作和标准I/O文件操作区别 (转载)
- 如何寻找最适合的职业道路?
- 教你用报表工具搭建企业考核系统
- 内存碎片及伙伴算法
- window网络客户端----->网络层逻辑1
- 状态设计模式
- 致远M1移动协同软件
- php 清除前面的输出
- Be cautious when using Map and Set in Java
- iOS 简单的猜颜色游戏 界面设计的比较简单 - -
- iOS 文件操作
- 从300到300万,一个远程外包团队的发展历程和经验
- JAVA面试题集(上)