Bläddra i källkod

add worker->connections

walkor 10 år sedan
förälder
incheckning
2a50347b7e
3 ändrade filer med 16 tillägg och 1 borttagningar
  1. 7 0
      Workerman/Connection/TcpConnection.php
  2. 8 0
      Workerman/Worker.php
  3. 1 1
      start.php

+ 7 - 0
Workerman/Connection/TcpConnection.php

@@ -82,6 +82,12 @@ class TcpConnection extends ConnectionInterface
     public $protocol = '';
     
     /**
+     * 属于哪个worker
+     * @var Worker
+     */
+    public $worker = null;
+    
+    /**
      * 发送缓冲区大小,当发送缓冲区满时,会尝试触发onError回调(如果有设置的话)
      * 如果没设置onError回调,发送缓冲区满,则后续发送的数据将被丢弃,
      * 直到发送缓冲区有空的位置
@@ -553,6 +559,7 @@ class TcpConnection extends ConnectionInterface
                echo $e;
            }
        }
+       unset($this->worker->connections[(int)$this->_socket]);
        Worker::$globalEvent->del($this->_socket, EventInterface::EV_READ);
        Worker::$globalEvent->del($this->_socket, EventInterface::EV_WRITE);
        @fclose($this->_socket);

+ 8 - 0
Workerman/Worker.php

@@ -148,6 +148,12 @@ class Worker
     public $transport = 'tcp';
     
     /**
+     * 所有的客户端连接
+     * @var array
+     */
+    public $connections = array();
+    
+    /**
      * 应用层协议,由初始化worker时指定
      * 例如 new worker('http://0.0.0.0:8080');指定使用http协议
      * @var string
@@ -1210,12 +1216,14 @@ class Worker
         ConnectionInterface::$statistics['connection_count']++;
         // 初始化连接对象
         $connection = new TcpConnection($new_socket);
+        $connection->worker = $this;
         $connection->protocol = $this->_protocol;
         $connection->onMessage = $this->onMessage;
         $connection->onClose = $this->onClose;
         $connection->onError = $this->onError;
         $connection->onBufferDrain = $this->onBufferDrain;
         $connection->onBufferFull = $this->onBufferFull;
+        $this->connections[(int)$new_socket] = $connection;
         
         // 如果有设置连接回调,则执行
         if($this->onConnect)

+ 1 - 1
start.php

@@ -5,7 +5,7 @@
  */
 
 ini_set('display_errors', 'on');
-use WorkerMan\Worker;
+use Workerman\Worker;
 
 require_once __DIR__ . '/Workerman/Autoloader.php';