ホームページ  >  記事  >  バックエンド開発  >  Workerman を使用して、ThinkPHP6 で Web サイト上のオンライン人数をリアルタイムでカウントします。

Workerman を使用して、ThinkPHP6 で Web サイト上のオンライン人数をリアルタイムでカウントします。

幸运切糕
幸运切糕オリジナル
2020-05-02 19:30:28150ブラウズ

Workerman は、純粋に PHP で開発されたオープンソースの高性能 PHP ソケット サーバー フレームワークです。モバイルアプリ、モバイルゲームサーバー、オンラインゲームサーバー、チャットルームサーバー、ハードウェア通信サーバー、スマートホーム、車両のインターネット、モノのインターネットなどの分野の開発で広く使用されています。 TCP の長い接続をサポートし、Websocket、HTTP およびその他のプロトコルをサポートし、カスタム プロトコルをサポートします。 Workerman をベースとすることで、開発者はビジネス ロジックの開発に集中できるようになり、基礎となる PHP Socket の開発について心配する必要がなくなりました。

この記事では、composer を使用して tp6 に workman 拡張機能をインストールし、オンラインの人数のリアルタイム統計を取得する方法について詳しく説明します。


think-worker 拡張機能をインストールします

インストール方法については、thinkphp6 公式マニュアルを参照してください: composer のインストール

composer require topthink/think-worker


作成するworkman サービス クラス

クラス ファイルの作成 <span style="background-color: rgb(255, 255, 255); color: rgb(88, 96, 105); font-family: -apple-system 、BlinkMacSystemFont、" segoe ui color emoji font-size:>app/common/http/Worker.php<code><span style="background-color: rgb(255, 255, 255); color: rgb(88, 96, 105); font-family: -apple-system, BlinkMacSystemFont, " segoe ui helvetica arial sans-serif color emoji font-size:>app/common/http/Worker.php</span>

<?php

namespace app\common\http;

use think\worker\Server;
use Workerman\Lib\Timer;
use think\facade\Cache;

class Worker extends Server
{
        //监听7373端口
        protected $socket = &#39;http://0.0.0.0:7373&#39;;
    //在线人数,初始为0
    protected $connection_count = 0;
    
    public function __construct(){
    	parent::__construct();
    }

    public function onConnect($connection)
    {
        //客户端连接成功,在线人数+1
        ++$this->connection_count;
    }
 
    public function onWorkerStart($worker)
    {
        //定时器,每隔1秒执行一次,根据自己需求修改
        Timer::add(1, function() use($worker){
            $data = json_encode([
                &#39;online&#39;    => $this->connection_count,
            ]);
            //把最新的在线人数循环推送给已连接的客户端
            foreach($worker->connections as $connection){
                $connection->send($data);
            }
            //缓存最新在线人数,页面渲染时,会先从缓存中读取,提高用户体验
            Cache::set(&#39;online&#39;, $this->connection_count);
        });
    }

    public function onClose($connection)
    {
        //客户端断开,在线人数-1
        $this->connection_count--;
    }

    public function onError($connection, $code, $msg){}
}


<span style="background-color: rgb(255, 255, 255); color: rgb(88, 96, 105); font-family: -apple-system, BlinkMacSystemFont, " segoe ui helvetica arial sans-serif color emoji font-size:></span>;

&#39;worker_class&#39;   => &#39;app\common\http\Worker&#39;, // 自定义Workerman服务类名 支持数组定义多个服务

<span style="background-color: rgb(255, 255, 255); color: rgb(88, 96, 105); font-family: -apple-system 、BlinkMacSystemFont、" segoe ui color emoji><strong></strong></span>
ワーカー構成ファイルを変更します

configworker_server.phpを開き、変更が必要な部分は以下の通りです:

<?php
namespace app\controller;

use app\BaseController;
use think\facade\View;

class Index extends BaseController
{
    public function index()
    {
        return View::fetch();
    }
}


Controllerのテストコード

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>workerman实时统计在线人数测试</title>
</head>
<body>

    <div>
        <span>在线人数:</span>
        <span id="online">{$online}</span>
    </div>

    {load href="/static/js/jquery.min.js}
    <script>
        ws = new WebSocket("ws://localhost:7373");
        ws.onmessage = function(e) {
            var data = JSON.parse(e.data);
            $(&#39;#online&#39;).text(data.online + &#39; 人&#39;);
        }
    </script>

</body>
</html>

テストコードを表示

php think worker:server

workermanを起動します

プロジェクトのルートディレクトリに移動し、次のコマンドを実行します。

Workerman を使用して、ThinkPHP6 で Web サイト上のオンライン人数をリアルタイムでカウントします。統計結果を確認してください


統計が成功したかどうか別のウィンドウを開いて確認してみましょう。

Workerman を使用して、ThinkPHP6 で Web サイト上のオンライン人数をリアルタイムでカウントします。

OK、最新の人数がページに自動的に更新されました。もっと練習して、このチュートリアルを気に入っていただければ幸いです。

上記は、ThinkPHP6 で、workerman を使用して Web サイト上のオンライン人数をリアルタイムにカウントする方法の詳細です。詳細については、PHP 中国語 Web サイトの他の関連記事に注目してください。

以上がWorkerman を使用して、ThinkPHP6 で Web サイト上のオンライン人数をリアルタイムでカウントします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。