系统间通信(四)---优化篇(3)

匿名 (未验证) 提交于 2019-12-03 00:20:01

1.实现原理:阻塞式通信模型是因为服务器端在accept和read方法的时候,如果没有外部网络连接请求或者外部网络的数据传输,那么就会处于等待状态。非阻塞式通信模型,主要是通过为accept和read方法设置等待时间,在超过等待时间之后可以让CPU暂时做一些其他处理,过一段时间再去监测accept方法和read方法。

2.服务端代码:

(1)为accept方法设置等待时间:


(2)为read方法设置等待时间:


3.客户端代码:

4.实验结果:

(1)为accept方法设置等待时间:

先启动服务端(不启动客户端),此时没有客户端连接请求。服务器等待3秒,若没有客户端请求过来,则服务器可以在这个时候让CPU去做其他处理。运行结果如下图:


此时启动客户端,服务器收到客户端请求,处理客户端请求,并将处理结果返回给客户端。

服务器端运行结果如下图:


客户端运行结果如下图:


注:因为编码的不同,所以客户端发送的消息到了服务端可能会乱码。比如我在客户端输入的是“nihao。”,到服务端就成了“ihao。”。如果输入的是汉字的话就可以明显的看出来。所以在测试之前还需要调整编码,我这里就不调了。

(2)为read方法设置等待时间:

先启动服务端(不启动客户端),此时因为没有连接请求,所以accept方法在监测超时后CPU会进行一段时间的其他处理。


启动客户端,此时客户端发送连接请求,服务端收到连接请求以后,read方法开始监测数据传输,因为客户端没有发送任何数据,所以在read方法监测超时以后CPU也会进行一段时间的其他处理。


此时客户端发送数据,服务端read方法接收到数据,CPU先去处理read接收到的数据,处理完以后如果客户端不发送数据,那么read方法在等待超时之后,CPU会继续先进行一段时间的其他处理。


注:(1)可以看到因为没有设置编码的问题,确实是乱码的。(2)因为本例是单线程的,所以在有客户端连接以后,进入read方法,那么accept方法就不会再执行,也就不会再阻塞,所以不会再有“accept方法CPU执行其他操作“。

5.总结:(1)阻塞型通信模型到非阻塞型通信模型的转变,就是为accept和read方法设置等待时间。


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!