チャットを送信してMMOに保存するにはどうすればよいですか?


8

MMOゲームのプレイヤーは通常、さまざまなチャネル(プライベート、パブリック、ギルドなど)を介してメッセージを送信できます。

外部のユーザーが誰かのプライベートチャットメッセージにアクセスできないようにするには、どのようにこのデータを送信して保存しますか?データを一時的なゲームログまたはデータベースに保存する必要がありますか?


3
「MMOはそれをどのように行うのか」と質問するのは広すぎ、確信を持って回答するには内部の知識が必要です。私はどのようにもっと焦点を当てるためにあなたの質問を調整し、あなたがのためにチャットを実装する必要があり、あなたの可能な限りのセキュリティを維持する上を目指して、プロジェクト。

回答:


13

外部の当事者がクライアントからのチャットパケットを傍受する機能を実際に削除するつもりはありません。MMOを構築するときは、産業用の強度ではなくゲームを構築するため、あまり心配する必要はありません。暗号で保護されたチャットプラットフォーム。

次のようにチャットメッセージを実装する必要があります。

  • クライアントは、チャットデータを送信します。これには、少なくともチャットメッセージが含まれますが、おそらくチャネルまたはグループの情報(パブリックチャット、ギルドチャット、プレーヤー間のささやきなど)も含まれます。
  • サーバーはチャットデータを取得します。最初にログに記録します。必要以上に長くメモリに常駐させる必要がないため、おそらくどこかオフラインになります。ロギングは重要で見過ごされがちですが、GMの調停やフォレンジック診断には非常に役立ちます。MMOを実行するときは、すべてログに記録する必要があります
  • データがログに記録されると、サーバーはチャットメッセージを受信するユーザーを決定し、適切にブロードキャストします。その後、サーバーは残りのデータをフロアにドロップできます。もう必要ありません。

ここで最も脆弱な点は、クライアントからサーバーへの最初の送信です。誰かがこれらのパケットをスヌープすると、技術的にそれらを意図していないメッセージを見ることができます。データを暗号化することもできますが、これは最小限の利益のためだけの多大な労力です。クライアントは最終的にチャットパケットを復号化できる必要があり、パケットがクライアントを離れるときにパケットを傍受することが前述のスヌーピングを行うのに最適な場所となるため、スヌーパーはキーを入手できますが、見つけるのは少し難しくなります。

ただし、管理しているサーバーを経由してチャットを渡すことが非常に重要です。それはゲームサーバーである必要はなく、チャットをファネリングするための専用サーバーにすることができますが、ルーティングを制御したいとします。GMの紛争を監視し、ユーザーリクエストを強制して他のユーザーをブロックまたはミュートし、NATパンチングやピアツーピアチャットを実行しようとしている可能性のある他のネットワーキング詐欺で起こり得る問題を解決します。これは、カジュアルなハッキング(ピアツーピアのチャットが起こりやすい)に対する十分な障壁を提供し、セキュリティ上の懸念の90%を解決します。それはあなたが手に入れるのと同じくらい良いことです。


HTTPSを使用できますか?おそらくチャットメッセージは、ゲームの他の部分ほどレイテンシクリティカルではないため、他のゲーム関連パケットとは別のメカニズムを使用して、HTTPS経由で(たとえば、WebSocketを使用して)送受信できます。
ジャスティン

1
あなたはそれを機能させることができますが、特に他の理由でおそらくいくつかのチャットメッセージをゲームサーバーで処理したい場合(おそらくそれらは実際にはスラッシュコマンドである場合)に、追加のサイドチャネルを実装する価値がある理由はわかりません、おそらくそれらはマークアップなどをリンクするある種のアイテムを含んでいます)。それはオプションです。

2

正直言って、あなたが何を求めているのか100%わかりません。しかし、うまくいけば、以下が役に立ちます。

あなたに見ればプレーンシフト、オープンソースのMMOは、あなたが彼らのコードを見て、彼らは彼らのシステムアーキテクトに決めたかを見ることができます。これにより、すべてのMMOについて正確な洞察が得られるわけではありませんが、ほとんどの場合、実装はさまざまなゲームで同じです。

ここではそれらのソースをダウンロードするためのいくつかの方向です。SVNでチェックアウトする必要があります

私は一見しました、そしてあなたが中に入るならばsrc/client/gui/、ChatWindowクラスを見るでしょう。チャットのためにメッセージをサーバーに送り返したり、サーバーに送信したり、入力履歴も処理します。情報をパッケージ化し、サーバーに送信して配信するようです。したがって、このチャット情報はサーバーに保存されているため、だれもがアクセスできないと思います。これは、チャットレコードにアクセスするためにサーバーデータベースにアクセスできない場合です。彼らがすべてを維持できるとは思えません。チャットログを保持している場合は、おそらく一定の期間(おそらく数日か?)

とにかく、幅広い質問に対する幅広い答え。もっと焦点を絞った質問なしに、私は本当にそれよりはるかにうまくやることはできません。あなたがより狭い質問を持っているならコメントしてください、そして私がそれらに答えてみることができます。

Edit1:また、クライアントフォルダーでauthentclientクラスを見つけられることにも注意してください。これはクライアント認証などを処理します。チャットサーバーへの自身の認証という点で、チャット関連のセキュリティも処理すると思います。チャット専用のサーバーがない場合があります。したがって、すべてのクライアントに対してチャットサービスも実行しているのは、ゲームサーバーだけかもしれません。これは、実際にコードを研究することで理解できるものです。

より大きなMMOの場合、プレイヤー間のチャットを処理するためだけに専用のチャットサーバーを用意することで、彼らにお金をかけます。(インスタンスの場合と同じように)。


1

私がプレイしたほとんどのMMOは、メッセージを長期間保存しません。それはおそらく彼らをNSAのような否定的なバッジを持つGameCompanyに変えるからです。プレイヤーがデータベースに直接アクセスする場合を除きます。

Runescapeはメッセージをキャッシュに保存しており、ごくわずかな時間しか利用できません。そのようなデータが保存されているという事実のために、誰もが禁止されるのを聞いたことがありません。彼が言ったことについて別の劇を報告する必要がある場合。500〜ラインチャットの制限を使い果たすまで、彼は迅速でなければなりません。その後、彼のメッセージはすべて削除されます。プレーヤーが互いに叫ぶ最も混雑した場所では、最大10秒です。

メッセージは常にサーバー経由で送信され、保存はクライアントではなくサーバーで行われます。それ以外の場合、クライアントにハッキングしたプレーヤーAは、チャットを担当する配列を操作し、プレーヤーBが他の何かを書き込んだことを文字通り書き込むことができます。しばらくすると、彼はそのプレーヤーが何かを書き込んだことを報告でき、他のプレーヤーのキャッシュはそのような情報を保持できなくなる可能性があります。

チャットポータルGaduGadu.plによって行われたクライアントにメッセージを保存すると、ユーザーは別のPCでチャットをチェックできなくなります。ユーザーが生成したデータは、第三者に対して脆弱になります。主に公共のインターネットカフェで。または彼の元の友人に復讐を求めるかもしれない友人の家で。

サーバーに保存すると、プレーヤーBがプレーヤーAのデータにアクセスできなくなり、その逆も不可能です。「プレーヤーBがそのデータにアクセスできるか」というのは幅広い質問です。サーバーがオフラインでない限り、データが安全かどうかを確認することはできません。 ここでは一例です。


0

メッセージの保存は、後で配信する場合にのみ必要です。たとえば、人々がオフラインでログインしているプレイヤーにメッセージを送信できるようにする場合や、次回ログイン時に管理者がチャットを読むことを許可する場合などです。

これが不要な場合は、チャット処理を完全にインメモリで実行できます。

クライアントが送信する各チャットメッセージには、受信者に関する情報(パブリック、ギルド、プレイヤーXへのプライベートメッセージ)を含める必要があります。次に、サーバーはメッセージの読み取りを許可する文字を決定する必要があります。

  • 公開メッセージの場合、これらは送信キャラクターの特定の半径内のキャラクターです
  • ギルドメッセージの場合、これらは現在オンラインになっている送信者と同じギルドを持つキャラクターです
  • プライベートメッセージの場合、オンラインのときは同じ名前の文字です。

次に、これらの文字を制御するクライアントにメッセージを送信する必要があります。

ユーザーには表示されないはずのメッセージをクライアントに送信することは、トラフィックの無駄であり、「クライアントを信頼しない」という原則に違反します。


1
このようなアプローチでは、ゲーム管理者が後日チャットログを確認して紛争を調停し、不正行為の苦情に対処することができなくなります。だからそれは効率的かもしれませんが、MMO管理者として、それはおそらくあなたが望むものではありません。すべてのチャットは、少なくとも事前に定義された期間、ログに記録して安全に保持してから、アーカイブまたは消去してください。
MrCranky 2013

しかし、それを読むことを許可されるべきではないクライアントに送信しないことについてのあなたの言うことに同意します。フィルタリングはサーバー側で行う必要があります。
MrCranky 2013

@MrCrankyプライベートチャットをログに記録したい場合(特定の条件下では一部の国のプライバシー法に違反する可能性があります)、それをファイルやデータベースに記録することはできますが、送信先とは関係ありません。回答は更新されました。
フィリップ

1
ゲームサーバーに送信する場合は非公開ではありません。EULAは常にそれを明確にする必要があります。そこに他のふりをするMMOが見つかるとは思いません。プレーヤーがゲームを仲介者として使用している場合、プライベートなやり取りはありません。これはピアツーピアのチャット体験ではありません。彼らはゲームと対話しています。
MrCranky 2013

1
オンラインゲームではプライバシーは期待されていません。法律はそのようには機能しません。
Patrick Hughes
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.