<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## **支持監聽的格式** ``` <?php require_once __DIR__ . '/vendor/autoload.php'; use Workerman\Connection\TcpConnection; use Workerman\Worker; $version=Worker::VERSION; $starting_status=Worker::STATUS_STARTING; $runing_status=Worker::STATUS_RUNNING; $shutdown_status=Worker::STATUS_SHUTDOWN; $reloading_status=Worker::STATUS_RELOADING; $default_backlog=Worker::DEFAULT_BACKLOG; $max_udp_package_size=Worker::MAX_UDP_PACKAGE_SIZE; $ui_safe_length=Worker::UI_SAFE_LENGTH; #Worker::__construct([string $listen , array $context]) #$listen 的格式為 <協議>://<監聽地址> #<監聽地址> 可以為以下格式: #unix套接字,地址為本地一個磁盤路徑 #非unix套接字,地址格式為 <本機ip>:<端口號> #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 #websocket: 例如 websocket://0.0.0.0:8686 #text: 例如 text://0.0.0.0:8686 (text是Workerman內置的文本協議,兼容telnet,詳情參見附錄Text協議部分) #<本機ip>如果以為0.0.0.0表示監聽本機所有網卡,包括內網ip和外網ip及本地回環127.0.0.1 #<本機ip>如果以為127.0.0.1表示監聽本地回環,只能本機訪問,外部無法訪問 #<本機ip>如果為內網ip,類似192.168.xx.xx,表示只監聽內網ip,則外網用戶無法訪問 #注意:<端口號>不能大于65535。<端口號>如果小于1024則需要root權限才能監聽。監聽的端口必須是本機未被占用的端口,否則無法監聽,并且提示Address already in use錯誤 $ws = new Worker('websocket://0.0.0.0:8181'); $ws->count=2;#啟動2個進程 $ws->onConnect = function($connection){ $connection->onWebSocketConnect = function($connection , $httpBuffer) { echo "本次鏈接的客戶端IP:".$connection->getRemoteIp().PHP_EOL; var_dump($_GET, $_SERVER); // 可以在這里判斷連接來源是否合法,不合法就關掉連接 // $_SERVER['HTTP_ORIGIN']標識來自哪個站點的頁面發起的websocket連接 if($_SERVER['HTTP_ORIGIN'] != 'https://www.workerman.net') { // $connection->close(); return $_SERVER['HTTP_ORIGIN']; } // onWebSocketConnect 里面$_GET $_SERVER是可用的 // var_dump($_GET, $_SERVER); }; }; $ws->onMessage = function($connection,$data){ $connection->send("我已收到你發來的數據:".$data); }; Worker::runAll(); ``` >[info][PHP幾種回調寫法](https://www.workerman.net/doc/workerman/faq/callback_methods.html) ## **構造函數為空時可以作為定時任務** ``` use \Workerman\Worker; use \Workerman\Timer; require_once __DIR__ . '/vendor/autoload.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(); ``` ## **定時向客戶端的用戶們發送消息** ~~~php use Workerman\Worker; use Workerman\Timer; require_once __DIR__ . '/vendor/autoload.php'; $worker = new Worker('text://0.0.0.0:2020'); // 進程啟動時設置一個定時器,定時向所有客戶端連接發送數據 $worker->onWorkerStart = function($worker) { // 定時,每10秒一次 Timer::add(10, function()use($worker) { // 遍歷當前進程所有的客戶端連接,發送當前服務器的時間 foreach($worker->connections as $connection) { $connection->send(time()); } }); }; // 運行worker Worker::runAll(); ~~~ ## **Worker監聽自定義協議的端口** [Worker監聽自定義協議的端口](https://www.workerman.net/doc/workerman/worker/construct.html) 最終的目錄結構 ~~~ ├── 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 use Workerman\Worker; use Workerman\Connection\TcpConnection; require_once __DIR__ . '/vendor/autoload.php'; // #### MyTextProtocol worker #### $text_worker = new Worker("MyTextProtocol://0.0.0.0:5678"); /* * 收到一個完整的數據(結尾是換行)后,自動執行MyTextProtocol::decode('收到的數據') * 結果通過$data傳遞給onMessage回調 */ $text_worker->onMessage = function(TcpConnection $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 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 ~~~ 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>

                              哎呀哎呀视频在线观看