BIO和NIO相识几多呢?一路从实践角度从头领略下吧
完成了处事端的计划后,我们来实现一个客户端,起首实例化Socket工具,而且绑定ip为127.0.0.1(本机),端标语为8080,挪用write要领向处事器发送数据。 2.5 运行功效 当我们启动处事器,但客户端还没有向处事器提倡毗连时,节制台功效如下: 当客户端启动并向处事器发送数据后,节制台功效如下: 2.6 结论 从上面的运行功效,起首我们至少可以看到,在处事器启动后,客户端还没有毗连处事器时,处事器因为挪用了accept要领,将一向阻塞,直到有客户端哀求毗连处事器。 03 对客户端成果举办扩展 在上文中,我们实现的客户端的逻辑首要是,成立Socket --> 毗连处事器 --> 发送数据,我们的数据是在毗连处事器之后就当即发送的,此刻我们来对客户端举办一次扩展,当我们毗连处事器后,欠妥即发送数据,而是守候节制台手动输入数据后,再发送给处事端。(处事端代码保持稳固) 3.1 代码
3.2 测试 当处事端启动,客户端还没有哀求毗连处事器时,节制台功效如下: 当处事端启动,客户端毗连处事端,但没有发送数据时,节制台功效如下: 当处事端启动,客户端毗连处事端,而且发送数据时,节制台功效如下: 3.3 结论 从上文的运行功效中我们可以看到,处事器端在启动后,起首必要守候客户端的毗连哀求(第一次阻塞),假如没有客户端毗连,处事端将一向阻塞守候,然后当客户端毗连后,处事器会守候客户端发送数据(第二次阻塞),假如客户端没有发送数据,那么处事端将会一向阻塞守候客户端发送数据。处事端从启动到收到客户端数据的这个进程,将会有两次阻塞的进程。这就是BIO的很是重要的一个特点,BIO会发生两次阻塞,第一次在守候毗连时阻塞,第二次在守候数据时阻塞。 04 BIO 4.1 在单线程前提下BIO的瑕玷 在上文中,我们实现了一个浅显的处事器,这个浅显的处事器是以单线程运行的,着实我们不丢脸出,当我们的处事器吸取到一个毗连后,而且没有吸取到客户端发送的数据时,是会阻塞在read()要领中的,那么此时假如再来一个客户端的哀求,处事端是无法举办相应的。换言之,在不思量多线程的环境下,BIO是无法处理赏罚多个客户端哀求的。 4.2 BIO如那里理赏罚并发 在适才的处事器实现中,我们实现的是单线程版的BIO处事器,不丢脸出,单线程版的BIO并不能处理赏罚多个客户端的哀求,那么怎样能使BIO处理赏罚多个客户端哀求呢。 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |