本文共 1396 字,大约阅读时间需要 4 分钟。
所谓同步连接,就是一个服务器与第一个请求建立连接并通信后,第二个请求将会被阻塞。
所谓异步连接,就是一个服务器可以同时响应多个请求。
同步:服务器与接受请求的代码:
TcpListene server = newTcpListener(IPAddress.Parse("127.0.0.1"), port);
TcpClient tc =server.AcceptTcpClient();
异步:
BeginAcceptTcpClient()
EndAcceptTcpClient()
第一种模式:阻塞模式(同步)
TcpListene server = newTcpListener(IPAddress.Parse("127.0.0.1"), port);
while(true)
{
TcpClient tc =server.AcceptTcpClient();
// do ........................
}
来一个连接服务端端就响应了,然执行操作,如果操作没完成再来一个客户端请求就阻塞你,直到第一个请求完成操作。
总结特点:这种模式简单易行,适合客户端请求次数比较少场景。比如一下来了1000个请求,第一个去执行了,剩下的999个被阻塞。
第二种模式:多线程+阻塞(异步) 。。。 其实异步感觉就是多线程,涉及到临界资源的互斥问题。
TcpListene server = newTcpListener(IPAddress.Parse("127.0.0.1"), port);
while(true)
{
TcpClient tc =server.AcceptTcpClient();
//接收到客户端请求之后 就起一个线程 负责这个客户端TCP与服务端的通讯
Thread Th=new Thread(F);
Th.start();//有参数加参数没参数不加
}
void F( object oo)
{
//和客户端进行通讯
}
第三种模式:非阻塞模式(异步)
就不在用AcceptTcpClient()这种阻塞方式来接收请求。就是来一个请求马上接收。
通常用这两个方法组合使用
TcpListene server = newTcpListener(IPAddress.Parse("127.0.0.1"), port);
server.Start();
server.BeginAcceptTcpClient(newAsyncCallback(AcceptClient), server);
voidAcceptClient(IAsyncResult ar)
{ TcpListener server = (TcpListener)ar.AsyncState; TcpClient client = server.EndAcceptTcpClient(ar); }当执行BeginAcceptTcpClient时候编译器就会在线程池中创建一个线程监听连接请求,如果有请求就会自动调用委托的方法(这里的AcceptClient)来完成一个TcpClient的实例,再来一个客户端请求,线程池又新建一个线程去实例一个TcpClient对象,当然了如果想做长连接的多客户端与服务端的通讯时候,每一个TcpClient对象是要保存起来的,这只是异步的接收请求而已。
转载地址:http://wimws.baihongyu.com/