c\s下 soccket模式 (非)阻塞 异步\同步 是不是和服务器有关
解决方案 »
- 【疑问】内存分析,在Java程序中的作用
- 一个关于sqrt函数的问题.请大家来看看.谢谢
- LinkedHashMap的负载因子干啥用的?
- 如何用JFreechart在Jbuilder做表盘和图表
- 怎么获得java平台的缺省字符编码??
- 请教多线程中的yield()方法和notity()方法?在线等~!~1
- 请问java中对字符串操作有没有类似c语言中的sscanf函数
- 请帮我看看这个变量(属性)属于什么类型,谢谢!
- 对JVAV感兴趣的兄弟将大家的QQ或者是E-mail留下,以便大家互相交流和学习,还有个人主页也可以!!!
- 我想考SCJP,请问自己学行不行?要什么书呢?感谢各位相助!!!
- 谁能给我分析一下这个程序的执行过长 在线等
- 求!java中8个基本类型的转换
看服务器那边使用什么模式,比如select模式。
Java中的Socket类,是TCP协议的一个实现。
网络通信的双方都要求采用相同的通信协议才可以。阻塞与非阻塞,一般是指,在读写IO数据的两种方式。
阻塞读,是当IO中没有数据,或者,IO中的数据没有填满应用程序缓冲区的时候,
调用读方法的线程,会处于阻塞状态。
非阻塞读,是,无论IO中有没有数据,或者IO中的数据能否填满应用程序的缓冲区,
所调用的读方法,都会立刻返回。
网络通信的收发双方,可以采用相同的读写方式,也可以采用不同的读写方式。
没有什么必须或不必的概念,关键看项目的需求和应用层协议的规定(如果有的话)。同步和异步,通常是指,收发数据后,对数据的处理方式。
我们知道,通信双方收发数据,主要目的,就是要求接收方处理收到的数据。
而双方的交互过程,一般也是一问一答的形式。
比如:登录验证和发送短信两个例子。
登录验证的过程是,
首先客户端将验证信息发送至服务端进行验证,
然后,服务端返回给客户端一个是否通过验证的消息。
这个过程就完成了一次交互,一问一答,一个Request和一个Response。
发送短信的过程是,
首先,客户端将 要发送的短信信息发送到服务端,
然后,服务端返回给客户端一个是否能够发送的信息。
这就完成了一次交互,虽然,最终目的很有可能不能达到。
之后,客户端可以干别的事情了;而服务端会根据刚才客户端发送过来短信信息,将短信发送到目的地。
当短信到达目的地之后,服务端再给短信的发送方一个短信已到达的消息。我们注意到,同样都是发送数据给对方,让对方进行处理,
但是,上述两个例子却有着不同。
登陆验证,在服务端进行验证的过程中,客户端是不能够干其他事情的,
只有当验证完成后,客户端才能干其他事情。
这个例子,就是同步处理的例子。
而,发送短信,只要将你要发送的短信信息传达给服务端就行了,
其他的事情,自会由服务端进行处理,
作为短信发送方的客户端,这个时候可以干别的事情,
而并不是要等待短信到达目的地才可以干别的事情。
这个例子就是一个异步处理的例子。当然,我只是举个例子说明一下,实际当中,短信的发送也可以采用同步的方式。
到底采用同步处理还是异步处理,一般也是要看应用场景的。
而且,并非只出现在服务端,胖客户端的一些程序,
有时候在客户端也会采用异步处理机制来进行数据的处理。