目錄
- ?? 開啟多個 ws 服務失敗
- ?? 開啟服務失敗解決辦法
- ?? 同一個視窗中運行
?? 開啟多個 ws 服務失敗
- 正常情況下,如果你想開啟多個
websocket
服務的話 - 只要在一個檔案中,輸入
new Worker
兩次,監聽不同埠,使用Worker::runAll()
命令即可 - 但是你會發現在在
windows
中無法在一個檔案中同時監聽兩個websocket
服務,其他系統比如Linux
是沒有問題的 - 會報
multi workers init in one php file are not support
錯誤,意思windows
中禁止在同一個檔案中開啟多個websocket
服務
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$http_worker = new Worker("http://0.0.0.0:1234");
$http_worker->onMessage = function(TcpConnection $connection, $data)
{
$connection->send('hello http');
};
$ws_worker = new Worker('websocket://0.0.0.0:2345');
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
$connection->send('hello websocket');
};
// 運行所有Worker實體
Worker::runAll();
?? 開啟服務失敗解決辦法
-
windows
版本的workerman
不支持在同一個檔案中實體化多個Worker
,因此
windows
版本的workerman
需要將多個Worker
實體初始化放在不同的檔案中才可以解決 -
比如我們定義兩個檔案,一個
start_http.php
,另一個是start_websocket.php
,在檔案中分別加入以下代碼,監聽不同埠,然后使用php 檔案名
命令啟動這兩個檔案即可
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// 需要監聽不同的埠
$ws_worker = new Worker('websocket://0.0.0.0:xxxx');
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
$connection->send('hello websocket');
};
// 運行所有Worker實體(這里只有一個實體)
Worker::runAll();
?? 同一個視窗中運行
- 上面雖然可以解決運行多個
websocket
實體,但是你會發現有幾個檔案,就會有幾個運行視窗 - 如果開啟的服務更多,視窗也會更多,那么如何在同一個視窗中運行啟動多個服務呢
- 那么如果要解決這個問題,我們就可以創建一個
init.bat
檔案,然后在檔案中加入以下代碼,然后雙擊運行即可實作在同一個視窗中啟動多個服務 - /d: 表示切換目錄
- /b: 表示不打開新視窗,在當前視窗繼續執行
%切換到專案根目錄%
cd /d E:\xxxxxx
%啟動第一個服務%
start /b php start_http.php
%啟動第二個服務%
start /b php start_websocket.php
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/547176.html
標籤:PHP
下一篇:zynq基于DMA的串口傳圖