Workman を使用してチャット ルームを作成する
なぜこの記事を書くのか?
私はワークマンを何度か学習しましたが、毎回失敗しました(目的の機能を達成できませんでした。愚かであることを許してください)。しかし今回は、これまでに実装されていない機能の実装にも数時間かかりました。実際には、1 対 1 でメッセージを送信する機能と、メッセージをブロードキャストする (グループ チャット) という 2 つの単純な機能があります。この機能は昔から swoole で実装していましたが、私が think-worker を使いたいと思っていたからでもあります。考えてみれば、やはり自分で考えなければなりません。他の人が作ったフレームワークは去勢されているのかもしれません。バージョン。
workman は Windows で実行できるため、なぜ swoole を使用しないのかは聞かないでください。
(1) まず、thinkphp workman のインストールについて簡単に説明します。
thinkphp5.1のインストール
composer create-project topthink/think=5.1.x-dev tp5andworkman
think-workerのインストール
composer require topthink/think-worker=2.0.*
workmanを直接インストール
composer require workerman/workerman
(2) 見てみましょうit first think-worker code
config/worker_server.php
まず、メッセージをブロードキャストするサーバーの例を見てみましょう。 10 秒ごとにメッセージを定期的にブロードキャストします
'onWorkerStart' => function ($worker) { \Workerman\Lib\Timer::add(10, function()use($worker){ // 遍历当前进程所有的客户端连接,发送自定义消息 foreach($worker->connections as $connection){ $send['name'] = '系统信息'; $send['content'] = '这是一个定时任务信息'; $send['time'] = time(); $connection->send(json_encode($send)); } }); }
しかし、onMessage の間は $worker オブジェクトを取得できないため、メッセージをブロードキャストできません。
'onMessage' => function ($connection, $data) { $origin = json_decode($data,true); $send['name'] = '广播数据'; $send['content'] = $origin['content']; $message = json_encode($send); foreach($worker->connections as $connection) { $connection->send($message); } }
さまざまな方法を試しましたが、どれもうまくいきませんでした
'onMessage' => function ($connection, $data)use($worker) { // 这样是获取不到 $worker 对象的 // ...省略代码 }
したがって、thinkphp がカプセル化した think-worker フレームワークを放棄するしかなく、自分でそれを作成する (または変更する) 必要があります。フレームワークの内部コード)
フレームワーク内のコードを変更します: /vendor/topthink/think-worker/src/command/Server.php
(主に onMessage メソッドを自分で追加します)
use() つまり、内部使用のために関数に外部変数を渡すか、global $worker
$worker = new Worker($socket, $context); $worker->onMessage = function ($connection, $data)use($worker) { $origin = json_decode($data,true); $send['name'] = '广播数据'; $send['content'] = $origin['content']; $send['uid'] = $connection->uid; $message = json_encode($send); foreach($worker->connections as $connection) { $connection->send($message); } };
を使用します。このようにして、$worker を取得できます。 object
$worker->onMessage = function ($connection, $data)use($worker) { ... }
( 3) $connection は uid
にバインドされています。実際、$worker->connections が現在のすべてのユーザーの接続を取得することはすでにわかりました。 、接続もリンクの 1 つです。
Web ソケット接続時間を記録する:
$worker->onConnect = function ($connection) { $connection->login_time = time(); };
Web ソケット接続時間を取得する:
$worker->onMessage = function ($connection, $data)use($worker) { $login_time = $connection->login_time; };
$connection 接続の属性にデータをバインドできることがわかります。たとえば、 :
$connection->uid = $uid;
JavaScript 側が WebSocket サーバーに正常に接続すると、すぐにその uid をバインドのためにサーバーに送信します:
$worker->onMessage = function ($connection, $data)use($worker) { $origin = json_decode($data,true); if(array_key_exists('bind',$origin)){ $connection->uid = $origin['uid']; } };
(4) ユニキャスト メッセージ、つまりカスタム送信
$worker->onMessage = function ($connection, $data)use($worker) { $origin = json_decode($data,true); $sendTo = $origin['sendto']; // 需要发送的对方的uid $content = $origin['content']; // 需要发送到对方的内容 foreach($worker->connections as $connection) { if( $connection->uid == $sendTo){ $connection->send($content); } } };
この時点で、workman に基づいてメッセージを送信するカスタム オブジェクトが完了しました。
php ファイルはコンポーザーに保存されているため、ファイルをコピーして application/command
に配置し、名前空間を変更して独自のプロジェクトに保存するだけです
(5) swoole との比較
1. Workman は Windows システムで実行できますが、swoole は実行できません。
2. workman: $worker->connections はすべての接続を取得し、$connection->id は独自の接続 ID を取得します; swoole: $server->connections はすべての接続を取得します、$connection->fd独自の接続 ID を取得します。
3. onWorkerStart メソッドは workman の開始時に実行され、タイマーを書き込むことができます。swoole は WorkerStart を使用してタイマーを開始します。
チャットルームやタイマーならやはりワークマンの方が便利です。
ThinkPHP 関連の技術記事の詳細については、ThinkPHP の使用法チュートリアル 列にアクセスして学習してください。
以上がWorkman を使用してチャット ルームを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











MySQL と Java を使用して簡単なチャット ルーム機能を実装する方法 はじめに: 今日のソーシャル メディアの普及に伴い、人々はコミュニケーションや情報共有のためにオンライン チャットにますます依存しています。 MySQL と Java を使用して簡単なチャット ルーム機能を実装する方法は、非常に興味深く実践的なプロジェクトです。この記事では、MySQL と Java を使用してこの機能を実装する方法と、具体的なコード例を紹介します。 1. データベースを構築する まず、チャット ルーム関連の情報を保存するデータベースを MySQL に作成する必要があります。

JavaScript に基づいてリアルタイム チャット ルームを構築する インターネットの急速な発展に伴い、人々はインスタント メッセージングとリアルタイムのインタラクティブ エクスペリエンスにますます注目を集めています。一般的なインスタント メッセージング ツールとして、リアルタイム チャット ルームは個人と企業の両方にとって非常に重要です。この記事では、JavaScript を使用して簡単なリアルタイム チャット ルームを構築する方法と、対応するコード例を紹介します。まず、チャット ルームの UI インターフェイスとしてフロントエンド ページが必要です。単純な HTML 構造の例を次に示します: <!DOCTYPE

Go 言語を使用して Websocket チャット ルームを開発する方法. Websocket は、接続を確立することでサーバーとクライアント間の双方向通信を可能にするリアルタイム通信プロトコルです。 Websocket は、リアルタイムのメッセージ交換を可能にし、効率的なパフォーマンスを提供するため、チャット ルームを開発する場合に非常に良い選択肢です。この記事では、Go 言語を使用して簡単な Websocket チャット ルームを開発する方法と、いくつかの具体的なコード例を紹介します。 1. 準備 1. Goをインストールする

TP6Think-SwooleRPC サービスのパフォーマンスの最適化とデバッグ 1. はじめに インターネットの急速な発展に伴い、分散コンピューティングは現代のソフトウェア開発に不可欠な部分となっています。分散コンピューティングでは、RPC (RemoteProcedureCall、リモート プロシージャ コール) は、ネットワーク全体でメソッド呼び出しを実装できる一般的に使用される通信メカニズムです。 Think-Swoole は、高性能 PHP フレームワークとして、RPC サービスを適切にサポートできます。しかし

ThinkPHP6 チャット ルーム開発ガイド: リアルタイム コミュニケーション機能の実装 はじめに: インターネットの急速な発展に伴い、リアルタイム コミュニケーションの需要も高まっています。リアルタイム コミュニケーションの一般的な方法として、チャット ルームは広く注目され、使用されています。この記事では、ThinkPHP6 フレームワークを使用してリアルタイム通信機能を実装する簡単かつ迅速な方法を説明します。 1. 環境構成: 開始する前に、開発環境を構成する必要があります。 PHP および ThinkPHP6 フレームワークがインストールされていることを確認してください。同時に、この記事では、

PHP と Websocket を使用してチャット ルーム機能を開発する はじめに: インターネットの急速な発展に伴い、チャット ルームは人々が日常生活でコミュニケーションし、交流するための重要な手段の 1 つになりました。 PHP と Websocket テクノロジーを使用してチャット ルーム機能を開発すると、リアルタイムの双方向コミュニケーションが実現され、よりスムーズで便利なチャット エクスペリエンスをユーザーに提供できます。この記事では、PHP と Websocket を使用して簡単なチャット ルームを実装する方法と、具体的なコード例を紹介します。 1. 準備: 開発を開始する前に、次のことを確認する必要があります。

インターネット時代において、チャット ルームは人々がコミュニケーションし、社交するための重要な場所となっています。 WebSocket テクノロジーの登場により、リアルタイム通信がよりスムーズかつ安定しました。今回は、Swoole フレームワークを使用して WebSocket ベースのチャット ルームをすばやく構築する方法を紹介します。 Swoole は、C 言語で書かれた高性能 PHP コルーチン ネットワーク通信フレームワークで、非同期 IO、コルーチン、ネットワーク通信、その他の機能を統合し、Node.js のような PHP コードを作成します。

TP6 (ThinkPHP6) は、PHP をベースとしたオープンソースのフレームワークであり、高い拡張性と分散展開の特徴を持っています。この記事では、TP6 と Swoole 拡張機能を使用して拡張性の高い RPC サービスを構築する方法と、具体的なコード例を紹介します。まず、TP6 と Swoole 拡張機能をインストールする必要があります。コマンドラインで次のコマンドを実行します:composerrequiretopthink/thinkpeclinstallswo
