PHP Pthread の使用法についてお聞きしたいのですが
現在カードゲームを開発中です。クライアントとサーバーの両方が作成されました。
これでカードをプレイできるようになりました。
カードをプレイするとき、誰かがカードをプレイしない場合は一時停止する必要があります
とにかく、多くの場所でスリープを使用する必要があります。
そのままスリープしてください
その後、単一プロセスであるため、サーバー全体が停止します。 。
そこで、私は pthread を使用する予定です。スレッドは、通信と遅延を容易にするために、プレーヤー オブジェクトに格納されます。メインプロセスから直接データを取得することはできません。それとも、プレーヤーオブジェクトはスレッドです
スレッドをあまり使用したことがなく、実装方法がわからないため、アイデアは異なります。実装できるかわかりません。
開発中のため、変更できません。
アイデアを教えてください。コードが多すぎるので単純に自分でコードを投稿します **アスタリスクが取得できません
あと、スリープポーズと通信部分について何か良いアイデアがあれば教えてください。 。 。 。 。
クラス WaitingRoom{
public static $Rooms= array();
public static $Gamers = array();
public function addGamer($gamer_id){
db query
self ::$Gamers = new Gamer($gamer_id);
}
}
WaittingRoom::addGamer("game_id");
class Connection extends Thread {
public $connection ;
public $uid = null;
public $is_free;
$this->is_free = false; $client;
$this->start();
}
}
connections = array();
do{
接続がある場合 [ ] = new Con($sockit);
}while
class Con(){
public function __construct($client){
$this->connection = $client; 🎜> $this->start();
}
public run(){
while($this-connection reads data){
ここでデータを処理します
処理時に使用されますデータ全体の状況 静的変数
****** WaitingRoom::$Gamers[identity]->指定された関数または変数はインポートされたデータを取得できず、DB 操作もできません ********
******
}
}
ディスカッションへの返信 (解決策)
あなたの考え方に何か問題があるようですか?また、私がマルチスレッドの仕組みを理解するのに十分な知識がないことも考えられます。
マルチスレッドを使用する場合、ソケットサーバーは 1 つのポートのみをリッスンします。ユーザーはどのポートが空いているかをどのようにして知るのでしょうか?
睡眠がよく使われると言いましたが、それはなぜですか?
待機中のループがあるため (私の推測です)、スリープすると間違いなく処理が遅くなります
残念ながら私が推測したのであれば、ポイントツーポイントのソケット アーキテクチャを使用していることになります
によるとあなたの説明 アプリケーションは選択アーキテクチャ (ポイントツーマルチポイント) を使用する必要があります:
マスター リスナー master を作成します
それを接続リストに追加しますソケット[] = master
永続的なループ内で (無限ループと言います) :
コネクタリストのコピーを取得して変更 = ソケット
各コネクタのステータスを読み取ります。ステップ)
ソケット選択はコネクタリスト内にのみあります。変更があった場合にのみ返されるため、スリープして待つ必要はありません。
(ソケットとして変更された)foreach の有効な接続ワードのリストを調べます。 🎜> if (socket == master) は通常、新しい接続リクエストがあることを意味し、ソケットソケットを追加して応答します
else はユーザーがデータを受信し、それを読み取って応答することを意味します
このアーキテクチャはあなたが思っているほど複雑ではありません
を発行します。イベント同期として 1 ~ 2 秒待つ必要がありますが、内部にはコンピューターがあります。 。 。 。コンピューターが睡眠を与えてくれないと、配られるカードを見ることができなくなり、今度はあなたがカードを配る番になります。 。
ああ、たくさん話しましたが、私の言語能力には限界があります。 。 。 WEBページであれば、1ユーザーにつき1ページとなります。 。ただし、ソケットの場合は、1ページで複数のユーザーが読み書きできます
ページをスリープに与えると、直接入ってきたプレイヤー全員とルームにいるプレイヤーはデータを受信できないため、マルチスレッド処理
メイン今のところスレッドがあまりないということです。 。余分なスレッドのスリープはメインスレッドには影響しません。 。他のユーザーはデータ
の読み取りと書き込みを行ってから、コードを投稿できます。 。グローバル オブジェクトをスレッドで読み取れないことがわかりました。 。 。 。作成されたオブジェクト。 。 。つまり、プレイヤーオブジェクトです。
マルチスレッドを使用する必要がある場合、
if (socket == master) は通常、新しい接続要求を示します、
startここに 1 つ スレッド、完了 ソケットをソケットに追加し、応答 それ以外の場合は、ユーザーがデータを受信していることを意味します、
ここでスレッドを開始し、完了 読み取りと応答

thesecrettokeepingaphp-poweredwebsterunningsmootlyunderheavyloadinvolvesseveralkeystrategies:1)emform opcodecoduceSciptionexecutiontime、2)aatabasequerycachingwithiThing withiThistolessendavasoload、

コードをより明確かつ維持しやすくするため、依存関係が関心(DI)に注意する必要があります。 1)DIは、クラスを切り離すことにより、よりモジュール化されます。2)テストとコードの柔軟性の利便性を向上させ、3)DIコンテナを使用して複雑な依存関係を管理しますが、パフォーマンスの影響と円形の依存関係に注意してください。

はい、最適化されたAphPossibleandessention.1)CachingingusapCutoredatedAtabaseload.2)最適化、効率的なQueries、およびConnectionPooling.3)EnhcodeCodewithBultinctions、Avoididingglobalbariables、およびUsingopcodeching

keyStrategIestsoSificlyvoostphpappliceperformanceare:1)useopcodecachinglikeToreexecutiontime、2)最適化abaseの相互作用とプロペラインデックス、3)3)構成

aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

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