首頁 > php框架 > Workerman > 主體

Workerman開發實戰:搭建高效率的即時通訊系統

PHPz
發布: 2023-08-05 14:03:15
原創
1122 人瀏覽過

Workerman開發實戰:建立高效的即時通訊系統

引言:
隨著網路的快速發展和使用者對即時通訊需求的增加,即時通訊系統成為了當下熱門的開發領域。為了滿足各種即時通訊需求,我們可以利用PHP開源框架Workerman來建構高效率且穩定的即時通訊系統。本文將介紹如何使用Workerman框架來開發一個強大的即時通訊系統,並附上程式碼範例。

  1. 安裝Workerman:
    首先,我們需要安裝Workerman框架。在終端機中執行以下指令來安裝Workerman:

    composer require workerman/workerman
    登入後複製

    安裝完成後,我們就可以開始建置即時通訊系統了。

  2. 建立服務端:
    建立一個新的PHP文件,命名為server.php,用於建立即時通訊系統的服務端。在server.php檔案中,我們需要編寫以下程式碼:
<?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。

  1. 建立客戶端:
    建立一個新的PHP文件,命名為client.php,用於建立即時通訊系統的客戶端。在client.php檔案中,我們需要寫以下程式碼:
<?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"。同時,監聽使用者輸入的訊息,並透過連線物件傳送到服務端。

  1. 執行即時通訊系統:
    在終端機中,分別執行下列指令來啟動服務端和用戶端:

    php server.php
    php client.php
    登入後複製

    服務端和用戶端在執行後就會進入監聽狀態,可以互相之間發送訊息了。當服務端接收到客戶端發送的訊息時,會將訊息廣播給所有連線的用戶端。

總結:
在本文中,我們介紹如何使用Workerman開發一個高效率的即時通訊系統。透過建立服務端和客戶端,並編寫對應的程式碼,我們可以實現即時通訊功能。 Workerman提供了一套完整的API和功能,讓我們可以輕鬆建立強大的即時通訊系統。希望本文對您有幫助,謝謝閱讀!

以上是Workerman開發實戰:搭建高效率的即時通訊系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!