搜尋
首頁php框架WorkermanWorkerman開發實戰:搭建高效率的即時通訊系統

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

Aug 05, 2023 pm 02:03 PM
即時通訊workerman實戰開發

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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Mac版

SublimeText3 Mac版

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

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用