0

ねえ、私はまだjavascriptに不慣れです。

NodeJS、socket.io、javascriptを使用してマルチプレイヤーサーバーで作業しています。

私はウェブサイトで見つけたサーバースクリプトで遊んでいます。.splitを使用して、いくつかの情報文字列をクライアントに送信します。次に、クライアントは配列を使用して、受信した順序に従って.splitデータを何に使用するかを決定します。

int(Socket.LastDataElement(2))
int(Socket.LastDataElement(3))

私の最初の質問は、これらのパッケージが間違った順序で届く可能性があるか、または適切にクリアされない可能性があるかどうかです。

考えられる結果:

健康=スイカ

スピード=チーズケーキ

また

間違ったプレイヤーが弾丸を撃ちます!


2番目の質問:

私の現在の観点からは、.split文字列を送信することは、Health、X、Y、Z、Attackなどを単一のパッケージとして送信する代替手段と比較して非常に賢く聞こえます。しかし、それは実際に帯域幅と時間を節約しますか?それとも、私は初心者なので、このように見えるだけですか。

乾杯

4

2 に答える 2

1

まず、いいえ。それらは(アプリケーションにとって)順不同で表示されることはありません。ライターは、データをTCP(伝送制御プロトコル)実装に渡します。TCP(伝送制御プロトコル)実装は、データを適切なリモートマシン上の適切なプロセスに転送するすべての作業を実行します。リーダーは、データのチャンクが順番に異なるのを辛抱強く待ってから、それを処理します。アプリケーション層プロトコル(WebSockets、Sockets.io)に応じて、データグラム全体が送信される場合と、文字データのみが一度に送信される場合があります。

あなたはマイクロ管理しています。これはTCPが処理する問題です。メッセージのサイズに関係なく、TCP実装(おそらくOSレベル)は、トランスポートに適していると判断した場合にメッセージをチャンクします。大量のデータ(キロバイトからメガバイトに相当)を送信していて、一度に少しずつ処理できる必要がある場合を除いて、データのチャンクやパケットサイズについて心配する必要はありません。

一般に、送信がアトミック(アプリケーションが反対側で必要なことを実行するために必要な最小限の情報)であることを確認してください。順序が正しくないパケットで問題が発生することはありません。帯域幅に関する限り、問題ありません。

于 2012-10-23T20:34:06.970 に答える
0

最初の質問を理解するのは少し難しいですが...

私のsocket.ioの経験から、メッセージは常にクライアントから送信されたのと同じ順序で到着し、メッセージが失われることはありません。ただし、たとえば、10個のメッセージが送信され、2秒間に分散される場合がありますが、遅延の問題により、すべてが同時に送信されたかのように、10個のメッセージが連続してすばやく受信されます(ここでも、順序は引き続き保持されます)。ゲーム内で何が起こっているかによっては、これが問題にならない場合もあります。ただし、実際には、各メッセージが送信されるまでの経過時間を気にする場合もあります(たとえば、プレーヤーがトリガーを2秒で10回、または5ミリ秒で10回押した場合など)。そして、メッセージにタイムスタンプを付けたり、反対側のタイムスタンプを理解したりする必要があります。

2番目の質問については、socket.io、さらにはWebSocketの基本的な実装についてあまり知らなくても、1つのメッセージにまとめるほど、帯域幅の観点からではないにしても、より良い結果が得られると思います。次に、少なくともパフォーマンスとレイテンシーの観点から。

javascript内では、ハンドラー関数(受信したjsonを処理する関数)がメッセージごとに1回呼び出されるため、メッセージをまとめると、ハンドラーが呼び出される回数が少なくなります。

于 2012-10-23T20:19:56.503 に答える