【发布时间】:2011-10-27 09:13:06
【问题描述】:
我正在使用一个与服务器建立远程连接的类。我遇到的一个问题是,如果连接没有得到响应,它会一直等到它得到响应。
这个类没有内置超时,如果可以避免的话我不想修改它。
有什么方法可以将一段代码包装成这样的东西吗?
try(timeout seconds){
}catch(){
//exception handle
}timeout(){
// timeout handline
}
编辑:我使用远程连接作为一个问题。我还有其他需要解决的问题,比如使用 exec 或其他类似的东西进行系统调用。
【问题讨论】:
-
你能改为异步调用吗?
-
@nico 你将如何在 PHP 中做到这一点?没有多线程,不能保证 pcntl_fork() 可用,并且许多资源类型不支持非阻塞模式......如果你只知道使用 PHP 核心的方法,我非常希望听到它(我没有意味着这个评论像它所做的那样讽刺......)
-
Ben,类中连接远程服务器的底层函数是什么? socket扩展中的所有connect函数都有超时参数,
fsockopen()也一样,后续操作可以使用stream_set_timeout()配合流资源或者socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,$timeout)配合sockets扩展... -
在服务器上可能有一个单独的脚本专门用于处理远程连接 - 要建立连接,您需要向另一个脚本发送请求(请求超时)。如果远程连接脚本在超时之前未能完成,原始脚本可以检测到它并继续前进。
-
@DaveRandom:我显然是在说异步调用客户端。
标签: php multithreading timeout remote-connection