Workerman開發實戰:建立高效的即時通訊系統
引言:
隨著網路的快速發展和使用者對即時通訊需求的增加,即時通訊系統成為了當下熱門的開發領域。為了滿足各種即時通訊需求,我們可以利用PHP開源框架Workerman來建構高效率且穩定的即時通訊系統。本文將介紹如何使用Workerman框架來開發一個強大的即時通訊系統,並附上程式碼範例。
安裝Workerman:
首先,我們需要安裝Workerman框架。在終端機中執行以下指令來安裝Workerman:
composer require workerman/workerman
安裝完成後,我們就可以開始建置即時通訊系統了。
<?php require_once __DIR__.'/vendor/autoload.php'; use WorkermanWorker; // 创建一个Worker监听2345端口,使用websocket协议通信 $ws_worker = new Worker("websocket://0.0.0.0:2345"); // 设置进程数 $ws_worker->count = 4; // 当客户端连接时 $ws_worker->onConnect = function($connection){ echo "New connection "; }; // 当客户端发送消息时 $ws_worker->onMessage = function($connection, $data){ foreach($connection->worker->connections as $clientConnection){ $clientConnection->send($data); } }; // 当客户端断开连接时 $ws_worker->onClose = function($connection){ echo "Connection closed "; }; // 运行worker Worker::runAll();
上述程式碼建立了一個Worker對象,監聽2345端口,並使用WebSocket協定通訊。當客戶端連接時,輸出"New connection";當客戶端發送訊息時,將訊息發送給所有連接的客戶端;當客戶端斷開連接時,輸出"Connection closed"。最後,使用Worker::runAll()方法來執行Worker。
<?php require_once __DIR__.'/vendor/autoload.php'; use WorkermanWorker; use WorkermanAutoloader; use WorkermanConnectionAsyncTcpConnection; $connect_list = array(); // 当用户输入消息时 function onMessage($connect) { // 从终端读取用户输入的消息 $message = trim(fgets(STDIN)); // 发送消息到服务端 $connect->send($message); } // 创建一个异步TCP连接到服务端 $connect = new AsyncTcpConnection('ws://127.0.0.1:2345'); $connect->onConnect = function($connection){ echo "Connected to server "; }; $connect->onMessage = function($connection, $data){ echo "Received message: ".$data." "; }; $connect->onClose = function($connection){ echo "Disconnected from server "; }; // 运行连接 $connect->connect(); // 将连接对象保存到连接列表中 $connect_list[] = $connect; // 监听用户输入消息 Worker::addWorker(function(){ readline_callback_handler_install('', function(){}); while (true) { if (count($GLOBALS['connect_list']) > 0) { $read = array_values($GLOBALS['connect_list']); $write = null; $except = null; if (false === ($num_changed_streams = stream_select($read, $write, $except, 1))) { continue; } elseif ($num_changed_streams > 0) { foreach($read as $connect) { onMessage($connect); } } } } }); Worker::runAll();
上述程式碼建立了一個AsyncTcpConnection對象,連接到服務端的2345埠。當連線成功時,輸出"Connected to server";當接收到服務端發送的訊息時,輸出"Received message: "以及特定的訊息內容;當與服務端斷開連線時,輸出"Disconnected from server"。同時,監聽使用者輸入的訊息,並透過連線物件傳送到服務端。
執行即時通訊系統:
在終端機中,分別執行下列指令來啟動服務端和用戶端:
php server.php php client.php
服務端和用戶端在執行後就會進入監聽狀態,可以互相之間發送訊息了。當服務端接收到客戶端發送的訊息時,會將訊息廣播給所有連線的用戶端。
總結:
在本文中,我們介紹如何使用Workerman開發一個高效率的即時通訊系統。透過建立服務端和客戶端,並編寫對應的程式碼,我們可以實現即時通訊功能。 Workerman提供了一套完整的API和功能,讓我們可以輕鬆建立強大的即時通訊系統。希望本文對您有幫助,謝謝閱讀!
以上是Workerman開發實戰:搭建高效率的即時通訊系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!