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"、Helvetica、Arial、sans-serif、"Apple Color Emoji"、"Segoe UI Emoji" font-size: 16px;">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, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px;">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 = 'http://0.0.0.0:7373'; //在线人数,初始为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([ 'online' => $this->connection_count, ]); //把最新的在线人数循环推送给已连接的客户端 foreach($worker->connections as $connection){ $connection->send($data); } //缓存最新在线人数,页面渲染时,会先从缓存中读取,提高用户体验 Cache::set('online', $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, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px;"></span>
; 'worker_class' => 'app\common\http\Worker', // 自定义Workerman服务类名 支持数组定义多个服务
<span style="background-color: rgb(255, 255, 255); color: rgb(88, 96, 105); font-family: -apple-system 、BlinkMacSystemFont、" Segoe UI"、Helvetica、Arial、sans-serif、"Apple Color Emoji"、"Segoe UI Emoji";"><strong>
ワーカー構成ファイルを変更します
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);
$('#online').text(data.online + ' 人');
}
</script>
</body>
</html>
テストコードを表示
php think worker:server
workermanを起動します
統計結果を確認してください
以上がWorkerman を使用して、ThinkPHP6 で Web サイト上のオンライン人数をリアルタイムでカウントします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。