我写的php脚本通过unix本地套接字与服务器通信。 1)连接 2)socket_write()(90%的时间低大小的块,10%的大尺寸) 3发送MSG)得到的答案 4)紧密连接php socket_write通过阻塞和非阻塞套接字
现在,我有简单的socket_write( )实现像comments from php manual“jean at briskula dot si 03-Feb-2011 03:00”
似乎它的工作正常阻塞模式,但我想实现socket_write的超时,因此我认为(需要)使用非阻塞模式,当调用socket_write()时。
阻塞模式优于非阻塞吗? 是否有理由实现超时? 如何正确实现它们? 任何示例?
试图写一个while循环,但得到=== FALSE,可能需要socket_select()每次在socket_write()调用之前?
ps。当从服务器读取答案时,这个问题同样适用于socket_read()
谢谢,但我能做些什么,可以发生的情况下,因为某些原因请求将长(无限),这将阻止c + +服务器的线程?我觉得某处需要添加超时...也许在C++端,但是如何? SO_LINGER? – abrahab 2012-04-12 11:18:29
如果你担心的是C++端,那么使用非阻塞套接字来查询数据,实现某种形式的超时。这个答案只是指等式的面向PHP的一面。为了正确使用非阻塞I/O,请查看http://stackoverflow.com/questions/6715736/using-select-for-non-blocking-sockets。 – modelnine 2012-04-12 13:32:16
感谢,仍然保持现状,因为解决方案与选择()是不好的,需要重写所有线程逻辑在现有的程序。也许在该功能将被读取一些关于整个套接字超时。在我看来,SO_LINGER对此负责。并冻结线程recv或发送永远不会永远阻止。 – abrahab 2012-04-12 18:41:06