建立並運行 Workerman 專案
什麼是 Workerman?
Workerman 是一個高性能的 PHP 異步網路通信庫,專為開發高併發、高性能的網路應用而設計。它可以用於構建 Web 伺服器、WebSocket 伺服器、TCP/UDP 伺服器等,適用於即時聊天、遊戲伺服器、物聯網等場景。Workerman 擁有輕量級、易用、高效等特點,使得開發者可以輕鬆地實現複雜的網路應用。
Workerman 的主要特性和優勢
- 高性能:基於事件驅動和異步非阻塞 I/O,能夠處理大量併發連接。
- 多協議支持:支持 HTTP、WebSocket、TCP、UDP 等多種網路協議。
- 易於使用:提供簡單易用的 API,使開發者能夠快速上手。
- 靈活擴展:可以通過插件和擴展實現更多功能。
- 強大的社區支持:擁有活躍的開發者社區和豐富的文檔資源。
Workerman 可以幫助開發者快速構建高性能的網路應用,適用於各種需要高併發處理的場景。
使用 Workerman 建立並運行一個簡單的 Web 伺服器
在這篇文章中,我們將介紹如何在 ServBay 環境中使用 Workerman 建立並運行一個簡單的 Web 伺服器。我們將演示如何安裝 Workerman、編寫基本的伺服器代碼,並運行伺服器。
TIP
ServBay 建議開發者把網站放置在/Applications/ServBay/www
目錄下,以方便管理。
安裝 Workerman
安裝 Composer
ServBay 出廠時已經自帶 Composer,無需單獨安裝。
創建專案目錄
建立一個新的專案目錄,並進入該目錄:
bashcd /Applications/ServBay/www mkdir servbay-workerman-app cd servbay-workerman-app
1
2
3安裝 Workerman
使用 Composer 安裝 Workerman:
bashcomposer require workerman/workerman
1
編寫 Web 伺服器代碼
在專案目錄下創建一個 server.php
文件,並添加以下代碼:
<?php
require __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
// 創建一個 Web 伺服器實例,監聽 8080 端口
$webServer = new Worker('http://0.0.0.0:8080');
// 啟動 4 個進程來處理請求
$webServer->count = 4;
// 定義請求處理邏輯
$webServer->onMessage = function($connection, $request) {
$connection->send('Hello ServBay!');
};
// 運行所有的 Worker 實例
Worker::runAll();
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
運行 Web 伺服器
在專案目錄下運行以下命令啟動 Web 伺服器:
php server.php start
啟動後,您可以在瀏覽器中訪問 http://localhost:8080
,您會看到頁面輸出 Hello ServBay!
。
使用 Workerman 創建 WebSocket 伺服器
除了 Web 伺服器,Workerman 還可以用來創建 WebSocket 伺服器。以下是一個簡單的 WebSocket 伺服器示例。
創建 WebSocket 伺服器代碼
在專案目錄下創建一個
websocket_server.php
文件,並添加以下代碼:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; // 創建一個 WebSocket 伺服器實例,監聽 8081 端口 $wsServer = new Worker('websocket://0.0.0.0:8081'); // 啟動 4 個進程來處理請求 $wsServer->count = 4; // 定義連接建立時的處理邏輯 $wsServer->onConnect = function($connection) { echo "New connection\n"; }; // 定義消息接收時的處理邏輯 $wsServer->onMessage = function($connection, $data) { $connection->send('Received: ' . $data); }; // 定義連接關閉時的處理邏輯 $wsServer->onClose = function($connection) { echo "Connection closed\n"; }; // 運行所有的 Worker 實例 Worker::runAll();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28運行 WebSocket 伺服器
在專案目錄下運行以下命令啟動 WebSocket 伺服器:
bashphp websocket_server.php start
1啟動後,您可以使用 WebSocket 客戶端(如瀏覽器中的 WebSocket 調試工具)連接到
ws://localhost:8081
,並發送消息,伺服器將會回顯收到的消息。
使用 Workerman 創建 TCP 伺服器
Workerman 還可以用來創建 TCP 伺服器。以下是一個簡單的 TCP 伺服器示例。
創建 TCP 伺服器代碼
在專案目錄下創建一個
tcp_server.php
文件,並添加以下代碼:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; // 創建一個 TCP 伺服器實例,監聽 8082 端口 $tcpServer = new Worker('tcp://0.0.0.0:8082'); // 啟動 4 個進程來處理請求 $tcpServer->count = 4; // 定義連接建立時的處理邏輯 $tcpServer->onConnect = function($connection) { echo "New connection\n"; }; // 定義消息接收時的處理邏輯 $tcpServer->onMessage = function($connection, $data) { $connection->send('Received: ' . $data); }; // 定義連接關閉時的處理邏輯 $tcpServer->onClose = function($connection) { echo "Connection closed\n"; }; // 運行所有的 Worker 實例 Worker::runAll();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28運行 TCP 伺服器
在專案目錄下運行以下命令啟動 TCP 伺服器:
bashphp tcp_server.php start
1啟動後,您可以使用 TCP 客戶端(如
telnet
或nc
命令)連接到localhost:8082
,並發送消息,伺服器將會回顯收到的消息。
總結
通過以上步驟,您成功使用ServBay創建並運行了一個 Workerman 專案,並使用 Workerman 提供的功能來創建 Web 伺服器、WebSocket 伺服器和 TCP 伺服器。Workerman 的高性能和易用性,使得它非常適合用於構建高併發、高性能的網路應用。希望這篇文章能幫助您快速上手 Workerman,並應用於您的專案中。