2017-06-23 2 views
0

// ---------- BACKSTORY -------- //クライアントはサーバーのリロード時に同時に再接続します。正しいプレーヤー番号を割り当てるために接続を分割する必要があります

私はポンゲームに取り組んでいます私の友人と。私たちはクライアント側で作業するようにゲームを構築しましたが、バックエンドを学んだ後、週末にサーバー側を実行してクライアント側にオブジェクトデータを送信してクライアント側に描画しました。

現在、「プレーヤー」割り当てのクライアント要求を受信するように構成されています。 2人のプレイヤーが割り当てられると、ゲームが開始され(サーバー側)、オブジェクトデータがクライアントに送信されます。

初めてユーザーが接続するとすべてうまく動作しますが、ここで問題が発生します。私がサーバー側を変更すると、サーバーがリセットされます(nodemonを使用していますが、それは関係ありません)。 サーバーが両方のクライアントをすぐに再接続しようとすると、再接続しようとすると、再接続しようとすると、プレーヤーは両方ともプレーヤー1として割り当てられ、ページが更新されるまでゲームはロックされます。

サーバの変更が実行された場所で作業するために使用されたコードは、(再接続中に)一時停止した後、クライアントは新しい変更を表示し続けます。これは我々がテストしていたときには素晴らしいことでした。今私はサーバーをリセットする必要があります(ノードモンで自動化)し、手動で各クライアントをリフレッシュしてください。

// ------ QUESTION -------- //

私の質問は、私は、クライアントが両方のプレイヤー1として割り当てされずに再接続することができます(そしてもっと重要なのは持つんですかサーバーはプレイヤーカウントを1と認識し、ゲームを再初期化しません)。

私はプレイヤーの割り当てに遅延(setTimeout)を入れてみましたが、これがどれほど役に立たないかをすぐに認識しました。同じ時間枠内での再接続中に両方のクライアントが遅延を経験するため、後で何らかの遅延で瞬時に再接続するか、または両方を再接続するかに違いはありません。

以下は、関連する分岐ファイルへのリンクです:

ReadMe

:これは私は、サーバーとクライアント間のステップとの相互作用を指示作っ過去記事です。これは、コードが

App.js

構造化されているのと同じ方法である:クライアント/サーバー間の初期の相互作用が行わ

ServerMain.jsを取るServerファイル:これは、メインサーバのファイルです。これはapp.jsで 'Main'として使用されています。ゲームはこのファイルから実行/発行されます

ClientMain.js:これは、接続された各クライアントに配信されるメインのクライアントファイルです。サーバーとのやりとりがすべて含まれています

答えて

0

これを書いて、何かを試してみました。 app.jsとclientmain.jsに気付いた場合、requestPlayerとassignPlayer(emits/listeners)の間に相互作用があります。これらは一度listenするように設定されていました(socket .onceメソッドを使用)。このため、サーバーの.onceが(サーバーのリセット時に)リセットされていましたが、クライアントの.onceはページが更新されていない場合には表示されませんでした。結局、私はrequestPlayerのやりとりが必要ではないと思います。私はそれを削除し、それは素晴らしい動作します。

関連する問題