<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 構造函數 \_\_construct ## 說明: ```php Worker::__construct([string $listen , array $context]) ``` 初始化一個Worker容器實例,可以設置容器的一些屬性和回調接口,完成特定功能。 ## 參數 #### **`$listen`** 如果有設置監聽```$listen```參數,則會執行socket監聽。 $listen 的格式為 <協議>://<監聽地址> **<協議> 可以為以下格式:** tcp: 例如 ```tcp://0.0.0.0:8686``` udp: 例如 ```udp://0.0.0.0:8686``` unix: 例如 ```unix:///tmp/my\_file ``````(需要Workerman>=3.2.7)``` http: 例如 ```[http://0.0.0.0:80```](http://0.0.0.0:80%60%60%60) websocket: 例如 ```websocket://0.0.0.0:8686``` text: 例如 ```text://0.0.0.0:8686``````(text是Workerman內置的文本協議,兼容telnet,詳情參見附錄Text協議部分)``` 以及其他自定義協議,參見本手冊定制通訊協議部分 **<監聽地址> 可以為以下格式:** 如果是unix套接字,地址為本地一個磁盤路徑 非unix套接字,地址格式為 <本機ip>:<端口號> <本機ip>可以為```0.0.0.0```表示監聽本機所有網卡,包括內網ip和外網ip及本地回環127.0.0.1 <本機ip>如果以為```127.0.0.1```表示監聽本地回環,只能本機訪問,外部無法訪問 <本機ip>如果為內網ip,類似```192.168.xx.xx```,表示只監聽內網ip,則外網用戶無法訪問 <本機ip>設置的值不屬于本機ip則無法執行監聽,并且提示```Cannot assign requested address```錯誤 **注意:**<端口號>不能大于65535。<端口號>如果小于1024則需要root權限才能監聽。監聽的端口必須是本機未被占用的端口,否則無法監聽,并且提示```Address already in use```錯誤 #### **`$context`** 一個數組。用于傳遞socket的上下文選項,參見[套接字上下文選項](http://php.net/manual/zh/context.socket.php) ## 范例 Worker作為http容器監聽處理http請求 ```php use Workerman\Worker; require_once './Workerman/Autoloader.php'; $worker = new Worker('http://0.0.0.0:8686'); $worker->onMessage = function($connection, $data) { var_dump($_GET, $_POST); $connection->send("hello"); }; // 運行worker Worker::runAll(); ``` Worker作為websocket容器監聽處理websocket請求 ```php use Workerman\Worker; require_once './Workerman/Autoloader.php'; $worker = new Worker('websocket://0.0.0.0:8686'); $worker->onMessage = function($connection, $data) { $connection->send("hello"); }; // 運行worker Worker::runAll(); ``` Worker作為tcp容器監聽處理tcp請求 ```php use Workerman\Worker; require_once './Workerman/Autoloader.php'; $worker = new Worker('tcp://0.0.0.0:8686'); $worker->onMessage = function($connection, $data) { $connection->send("hello"); }; // 運行worker Worker::runAll(); ``` Worker作為udp容器監聽處理udp請求 ```php use Workerman\Worker; require_once './Workerman/Autoloader.php'; $worker = new Worker('udp://0.0.0.0:8686'); $worker->onMessage = function($connection, $data) { $connection->send("hello"); }; // 運行worker Worker::runAll(); ``` Worker監聽unix domain套接字```(要求Workerman版本>=3.2.7)``` ```php use Workerman\Worker; require_once './Workerman/Autoloader.php'; $worker = new Worker('unix:///tmp/my.sock'); $worker->onMessage = function($connection, $data) { $connection->send("hello"); }; // 運行worker Worker::runAll(); ``` 不執行任何監聽的Worker容器,用來處理一些定時任務 ```php use \Workerman\Worker; use \Workerman\Lib\Timer; require_once './Workerman/Autoloader.php'; $task = new Worker(); $task->onWorkerStart = function($task) { // 每2.5秒執行一次 $time_interval = 2.5; Timer::add($time_interval, function() { echo "task run\n"; }); }; // 運行worker Worker::runAll(); ``` **Worker監聽自定義協議的端口** 最終的目錄結構 ```php ├── Protocols // 這是要創建的Protocols目錄 │?? └── MyTextProtocol.php // 這是要創建的自定義協議文件 ├── test.php // 這是要創建的test腳本 └── Workerman // Workerman源碼目錄,里面代碼不要動 ``` 1、創建Protocols目錄,并創建一個協議文件 Protocols/MyTextProtocol.php(參照上面目錄結構) ```php // 用戶自定義協議命名空間統一為Protocols namespace Protocols; //簡單文本協議,協議格式為 文本+換行 class MyTextProtocol { // 分包功能,返回當前包的長度 public static function input($recv_buffer) { // 查找換行符 $pos = strpos($recv_buffer, "\n"); // 沒找到換行符,表示不是一個完整的包,返回0繼續等待數據 if($pos === false) { return 0; } // 查找到換行符,返回當前包的長度,包括換行符 return $pos+1; } // 收到一個完整的包后通過decode自動解碼,這里只是把換行符trim掉 public static function decode($recv_buffer) { return trim($recv_buffer); } // 給客戶端send數據前會自動通過encode編碼,然后再發送給客戶端,這里加了換行 public static function encode($data) { return $data."\n"; } } ``` 2、使用MyTextProtocol協議監聽處理請求 參照上面最終目錄結構創建test.php文件 ```php require_once './Workerman/Autoloader.php'; use Workerman\Worker; // #### MyTextProtocol worker #### $text_worker = new Worker("MyTextProtocol://0.0.0.0:5678"); /* * 收到一個完整的數據(結尾是換行)后,自動執行MyTextProtocol::decode('收到的數據') * 結果通過$data傳遞給onMessage回調 */ $text_worker->onMessage = function($connection, $data) { var_dump($data); /* * 給客戶端發送數據,會自動調用MyTextProtocol::encode('hello world')進行協議編碼, * 然后再發送到客戶端 */ $connection->send("hello world"); }; // run all workers Worker::runAll(); ``` 3、測試 打開終端,進入到test.php所在目錄,執行```php test.php start``` ```php php test.php start Workerman[test.php] start in DEBUG mode ----------------------- WORKERMAN ----------------------------- Workerman version:3.2.7 PHP version:5.4.37 ------------------------ WORKERS ------------------------------- user worker listen processes status root none myTextProtocol://0.0.0.0:5678 1 [OK] ---------------------------------------------------------------- Press Ctrl-C to quit. Start success. ``` 打開終端,利用telnet測試(建議用linux系統的telnet) 假設是本機測試, 終端執行 telnet 127.0.0.1 5678 然后輸入 hi回車 會接收到數據hello world\\n ```php telnet 127.0.0.1 5678 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. hi hello world ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看