php非阻塞io网络库,为什么我的socket的read方法没有阻塞,直接?

用户投稿 31 0

关于“php非阻塞socket”的问题,小编就整理了【1】个相关介绍“php非阻塞socket”的解答:

为什么我的socket的read方法没有阻塞,直接?

一、你调用read的时候,实际上调用的是socketchannel的read方法,而你设置的阻塞模式是ServerSocketChannel的模式,所以调用read时依然会采用默认的阻塞方式,如果你希望用非阻塞的方式,只要设置一下socketchannel的阻塞模式就OK了。

二、默认情况下,read的方法是阻塞模式的,所以没有办法设置他的超时时间,如果客户端异常退出,当前的连接将永远等待下去,如果你修改成非阻塞模式就没有这个问题了,非阻塞模式你可以判断read返回值,如果超过N时间返回值一直都是0,就把当前的连接关闭。

三、我并没有这样混合用过,还没遇到过这样的问题,我猜想有可能是跟关闭的socketchannel、socket等等有关吧,可能关闭socket和关闭channel有些区别,我也不确定,反正建议你,想要NIO就用NIO,要是想要serversocket和scoket,那就只用这两个,尽量不要混合使用。希望对你有帮助。

到此,以上就是小编对于“php非阻塞socket”的问题就介绍到这了,希望介绍关于“php非阻塞socket”的【1】点解答对大家有用。

抱歉,评论功能暂时关闭!