基于tcp开发—异步机制
来源:互联网 发布:微信群加人软件免费版 编辑:程序博客网 时间:2024/06/08 13:49
前面关于socket的编程,全部是基于同步机制开发的服务器和客户端,线程会进入阻塞或者挂起状态,降低线程利用率,同时程序影响效率。因此,向tcp程序引入异步回调:在异步套接字完成网络操作后,线程没有被阻塞或者挂起,接着通过调用回调函数处理后续网络操作。而主线程继续执行,以实现并行执行的结果。
为什么要引入异步机制?
看到过一个解释。当我们打开一个程序时,鼠标不停地转但是就是不见界面跳转,这是其他耗时操作阻碍了ui线程,造成ui线程不能响应用户操作。如果引用异步机制,ui线程在发起耗时操作之后马上回来响应用户操作,把能响应的都给用户,最后等耗时操作结束,通过回调来处理耗时操作的结果。这就是异步机制能快速响应用户界面,还有更高的伸缩性(线程池更加灵活分配利用数量有限的线程)
什么是回调函数?为什么要用回调函数?
简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调常常是异步调用的基础,即回调用于通知机制。具体看http://www.cnblogs.com/swordzj/archive/2007/04/24/2034769.html。委托就是C++的函数指针,即回调机制;就是Java的监听器:所有提供功能待植入的机制都要用到它。
异步回调代码例子如下:
sever.BeginAccept(new AsyncCallBack(Accept),server);//server是一个Socket对象
void Accept(IAsyncResult iar)
{
Socket oldserver=(Socket)iar.AsycState;
service=oldserver.EndAccept(iar);
}
从代码看出,其实异步回调就是把回调函数Accept的函数地址以及函数要用到的信息的对象通知给BeginAccept,告诉BeginAccept当你执行结束的时候只要有这两样东西给我,你就能委托系统就能用我(Accept),而异步就体现在BeginAccept和委托函数AsyncCallBack
有了前面的基础概念,就可以开始开发基于tcp的异步通信程序了。由于程序有界面还有数据通信,并且通信获得的数据要显示在界面上,所以应该选用回调机制来实现,它需要多线程、委托、异步调用等概念。
- 基于tcp开发—异步机制
- 基于TCP通信协议的异步实现
- 基于异步通知机制的按键驱动
- 基于SOCKET机制的TCP协议通讯
- 基于SOCKET机制的TCP协议通讯
- 基于事件的异步Socket(TCP连接方式)
- 基于事件的异步Socket(TCP连接方式)
- 基于C#的socket编程的TCP异步实现
- 基于C#的socket编程的TCP异步实现
- 基于C#的socket编程的TCP异步实现
- 基于C#的socket编程的TCP异步实现
- 基于C#的socket编程的TCP异步实现
- 基于C#的socket编程的TCP异步实现
- 基于C#的socket编程的TCP异步实现
- 基于C#的socket编程的TCP异步实现
- 基于C#的Socket编程的TCP异步实现
- 基于C#的异步Socket程序(TCP)
- Proactor机制下的异步SOCKET开发
- 验证snprintf是否以null结尾
- __user && address_space(1)
- 转载-关于加班的思考
- oracle 分页查询
- 分享几个jquery的效果,虽然有些很简单,但是可以学习学习编码
- 基于tcp开发—异步机制
- 在Eclipse下搭建Android开发环境教程
- HDFS Federation(联邦)
- 遇到猝死事件如何急救
- POJ3687-反向拓扑排序
- 完善PHP登陆注册页面,同时连接mysql数据库
- Android.mk简介
- Android实现推送方式解决方案
- c语言--求两圆交点