PHP头条
热点:

二、升级:使用PHP自带异步IO去实现毫秒级超时)

说明:
异步IO:异步IO的概念和同步IO相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。异步IO将比特分成小组进行传送,小组可以是8位的1个字符或更长。发送方可以在任何时刻发送这些比特组,而接收方从不知道它们会在什么时候到达。

多路复用:复用模型是对多个IO操作进行检测,返回可操作集合,这样就可以对其进行操作了。这样就避免了阻塞IO不能随时处理各个IO和非阻塞占用系统资源的确定。

使用 socket_select() 实现超时

  1. socket_select(..., floor($timeout), ceil($timeout*1000000)); 

select的特点:能够设置到微秒级别的超时!

使用socket_select() 的超时代码需要了解一些异步IO编程的知识去理解)

  1. ### 调用类 ####  
  2.  
  3. <?php   
  4.  
  5. $server = new Server;   
  6.  
  7. $client = new Client;   
  8.  
  9.    
  10.  
  11. for (;;) {   
  12.  
  13.   foreach ($select->can_read(0) as $socket) {   
  14.  
  15.    
  16.  
  17.     if ($socket == $client->socket) {   
  18.  
  19.       // New Client Socket   
  20.  
  21.       $select->add(socket_accept($client->socket));   
  22.  
  23.     }   
  24.  
  25.     else {   
  26.  
  27.       //there's something to read on $socket   
  28.  
  29.     }   
  30.  
  31.   }   
  32.  
  33. }   
  34.  
  35. ?>   
  36.  
  37.    
  38.  
  39. ### 异步多路复用IO & 超时连接处理类 ###  
  40.  
  41. <?php   
  42.  
  43. class select {   
  44.  
  45.   var $sockets;   
  46.  
  47.    
  48.  
  49.   function select($sockets) {   
  50.  
  51.    
  52.  
  53.     $this->sockets = array();   
  54.  
  55.    
  56.  
  57.     foreach ($sockets as $socket) {   
  58.  
  59.       $this->add($socket);   
  60.  
  61.     }   
  62.  
  63.   }   
  64.  
  65.    
  66.  
  67.   function add($add_socket) {   
  68.  
  69.     array_push($this->sockets,$add_socket);   
  70.  
  71.   }   
  72.  
  73.    
  74.  
  75.   function remove($remove_socket) {   
  76.  
  77.     $sockets = array();   
  78.  
  79.    
  80.  
  81.     foreach ($this->sockets as $socket) {   
  82.  
  83.       if($remove_socket != $socket)   
  84.  
  85.         $sockets[] = $socket;   
  86.  
  87.     }   
  88.  
  89.    
  90.  
  91.     $this->sockets = $sockets;   
  92.  
  93.   }   
  94.  
  95.    
  96.  
  97.   function can_read($timeout) {   
  98.  
  99.     $read = $this->sockets;   
  100.  
  101.     socket_select($read,$write = NULL,$except = NULL,$timeout);   
  102.  
  103.     return $read;   
  104.  
  105.   }   
  106.  
  107.    
  108.  
  109.   function can_write($timeout) {   
  110.  
  111.     $write = $this->sockets;   
  112.  
  113.     socket_select($read = NULL,$write,$except = NULL,$timeout);   
  114.  
  115.     return $write;   
  116.  
  117.   }   
  118.  
  119. }   
  120.  
  121. ?>  


www.phpzy.comtrue/php/2425.htmlTechArticle二、升级:使用PHP自带异步IO去实现毫秒级超时) 说明: 异步IO:异步IO的概念和同步IO相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实...

相关文章

相关频道:

PHP之友评论

今天推荐