Workerman開發(fā):如何實(shí)作WebSocket伺服器
Nov 07, 2023 pm 03:29 PM如何使用Workerman實(shí)現(xiàn)WebSocket伺服器
隨著WebRTC技術(shù)、遊戲即時(shí)通訊、線上聊天等應(yīng)用的日益普及,WebSocket技術(shù)也變得越來越重要。而Workerman則是運(yùn)行在PHP環(huán)境下的高效能的非同步TCP、UDP、Unix Socket網(wǎng)路框架,它天生支援高並發(fā),非常適合用來開發(fā)WebSocket伺服器。
本篇文章將詳細(xì)介紹如何使用Workerman實(shí)現(xiàn)WebSocket伺服器,包括如何處理WebSocket連接、如何發(fā)送和接收WebSocket訊息以及如何進(jìn)行框架與其他程式庫的整合等方面。文章的最後也提供了一個(gè)完整的範(fàn)例程式碼。
- 安裝Workerman
在開始使用Workerman之前,需要先安裝它??梢酝高^Composer進(jìn)行安裝,也可以直接從GitHub下載原始碼並手動(dòng)安裝。這裡我們以Composer安裝為例:
composer require workerman/workerman
- 編寫WebSocket伺服器程式碼
在使用Workerman實(shí)作WebSocket伺服器之前,需要先了解WebSocket協(xié)定的工作原理。 WebSocket是一種全雙工、長連接的協(xié)議,客戶端和伺服器之間透過握手建立連接,之後可以互相傳送訊息。 WebSocket訊息可以是文字、二進(jìn)位甚至是檔案等任意數(shù)據(jù),伺服器可以根據(jù)訊息類型進(jìn)行不同的處理。
使用Workerman實(shí)作WebSocket伺服器非常簡單,只需要幾行程式碼即可完成。以下是範(fàn)例:
require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; // 創(chuàng)建一個(gè)Worker監(jiān)聽8090端口,使用websocket協(xié)議通訊 $wsWorker = new Worker("websocket://0.0.0.0:8090"); // 啟動(dòng)4個(gè)進(jìn)程對外提供服務(wù) $wsWorker->count = 4; // 處理WebSocket連接的回調(diào)函數(shù) $wsWorker->onConnect = function($connection) { echo "New connection "; }; // 處理WebSocket消息的回調(diào)函數(shù) $wsWorker->onMessage = function($connection, $data) { // 處理消息... }; // 啟動(dòng)Worker Worker::runAll();
首先,我們建立一個(gè)Worker實(shí)例,並指定它監(jiān)聽埠8090,使用websocket協(xié)定通訊。然後設(shè)定啟動(dòng)4個(gè)進(jìn)程,用於處理大量並發(fā)連線。 Worker支援TCP、UDP、Unix Socket等多種傳輸協(xié)議,因此我們需要指定WebSocket協(xié)定。
在這個(gè)範(fàn)例中,我們只定義了兩個(gè)回呼函數(shù):
- 當(dāng)有新的WebSocket連線建立時(shí),onConnect回呼函數(shù)將會(huì)被調(diào)用,我們可以在這裡記錄日誌、統(tǒng)計(jì)線上使用者等操作。
- 當(dāng)收到WebSocket訊息時(shí),onMessage回呼函數(shù)將被調(diào)用,我們需要在這裡處理訊息,例如進(jìn)行簡單的計(jì)算、發(fā)送回應(yīng)等操作。
- 最後一步是啟動(dòng)Worker,它將開始監(jiān)聽指定連接埠並處理WebSocket連線和訊息。
- WebSocket訊息的處理
透過onMessage回呼函數(shù),我們可以接收到客戶端發(fā)送的WebSocket訊息,資料格式可以是文字或二進(jìn)位。處理WebSocket訊息的方式取決於應(yīng)用程式場景,例如線上聊天應(yīng)用程式可能需要實(shí)現(xiàn)廣播、點(diǎn)對點(diǎn)聊天等功能,而遊戲應(yīng)用需要實(shí)現(xiàn)微秒級的即時(shí)通訊。
下面是一個(gè)簡單範(fàn)例,它可以將接收到的訊息列印出來並回覆給客戶端:
$wsWorker->onMessage = function($connection, $data) { echo "Received message: {$data} "; $connection->send("Received: {$data}"); };
WebSocket連線的狀態(tài)
在WebSocket連線建立後,客戶端和伺服器之間的連線會(huì)保持開啟。透過onClose回呼函數(shù),我們可以處理連接斷開的事件:
$wsWorker->onClose = function($connection) { echo "Connection closed "; };
- 整合框架
Workerman可以非常方便地與其他框架整合。這裡我們以Laravel框架為例,介紹如何在Laravel使用Workerman實(shí)作WebSocket伺服器。
首先,我們需要在Laravel專案中安裝Workerman:
composer require workerman/workerman
接下來,我們可以建立一個(gè)自訂Artisan指令來啟動(dòng)WebSocket伺服器:
php artisan make:command WebSocketServer
然後在app /Console/Commands/WebSocketServer.php檔案中編寫程式碼:
<?php namespace AppConsoleCommands; use IlluminateConsoleCommand; use WorkermanWorker; class WebSocketServer extends Command { // 命令名稱 protected $name = 'websocket:server'; // 命令描述 protected $description = 'Start WebSocket server'; // 執(zhí)行命令 public function handle() { // 創(chuàng)建Worker實(shí)例,監(jiān)聽8080端口 $wsWorker = new Worker("websocket://0.0.0.0:8080"); // 進(jìn)程數(shù)量 $wsWorker->count = 4; // 處理連接事件 $wsWorker->onConnect = function($connection) { echo "New connection "; }; // 處理消息事件 $wsWorker->onMessage = function($connection, $data) { // 處理消息 }; // 運(yùn)行Worker Worker::runAll(); } }
最後,我們可以透過以下指令來啟動(dòng)WebSocket伺服器:
php artisan websocket:server
可以看到,使用Workerman實(shí)作WebSocket伺服器非常簡單,並且可以輕鬆整合到其他框架中。
- 完整程式碼範(fàn)例
以下是一個(gè)完整的WebSocket伺服器範(fàn)例,它可以接收客戶端發(fā)送來的訊息並進(jìn)行簡單的處理,並將處理結(jié)果回復(fù)給客戶端:
count = 4; // 處理WebSocket連接的回調(diào)函數(shù) $wsWorker->onConnect = function($connection) { echo "New connection "; }; // 處理WebSocket消息的回調(diào)函數(shù) $wsWorker->onMessage = function($connection, $data) { echo "Received message: {$data} "; $result = "Received: {$data}"; $connection->send($result); }; // 處理連接斷開事件的回調(diào)函數(shù) $wsWorker->onClose = function($connection) { echo "Connection closed "; }; // 啟動(dòng)Worker Worker::runAll();
以上就是使用Workerman實(shí)現(xiàn)WebSocket伺服器的全部內(nèi)容,透過這篇文章的介紹,相信讀者們已經(jīng)掌握了相關(guān)的技術(shù)知識(shí),同時(shí)也可以在實(shí)際專案中使用這些技巧進(jìn)行開發(fā)了。
以上是Workerman開發(fā):如何實(shí)作WebSocket伺服器的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)