2012-05-04 16 views
1

私はPythonでアクションゲームを作っています。少なくとも2人のプレーヤーがインターネットで一緒に遊ぶのをサポートしなければなりません。私はUDPを選んだのは、低レイテンシーのゲームにとって自然な選択だと思われるからです。私はクライアント/サーバーモデルを使っているので、1人のプレイヤーにゲームをホストさせたいと思う。つまり、1人のプレーヤーがゲーム(サーバー)をホストしていて、同時にゲーム(クライアント)を実行しています。PythonゲームのノンブロッキングUDPサーバー?

スレッドを使用する必要がありますか、別の方法がありますか?問題は、Pythonのドキュメントにserve_foreverを使用するように言われていますが、ノンブロッキングのソリューションが必要です。理想的には、すべてのゲームループと呼ぶことができます。

+0

[Network Games for Pygame]の複製が可能です(http://stackoverflow.com/questions/1250739/network-support-for-pygame) –

答えて

3

私は、「Pythonのマニュアルはserve_foreverを使うと言います」と言って、あなたはSocketServerを使うつもりです。このモジュールは同期(フォークまたはスレッド)サーバーを実装しており、非同期ソリューションを探しているようです。

非同期非ブロッキングソリューションの場合は、http://twistedmatrix.com/trac/(特にtwisted.internet)をひねって見てください。

または、あなただけの投票を使用するか、ソケットおよびその他のリソースのために選択し、非常に具体的な何かを必要とし、イベントループを書く気にしない...

2

UDPは「自然な選択」ではありません。これは特定のタイプのデータ(通常は位置/速度データ)に関する特定のタイプの問題(パケット損失)の最適化です。

ゲームに問題があることを実証できるまで、TCPを使用してください。

ノンブロッキングネットワークをPythonのゲームに統合するには、Gameのアプローチを見てください。これは、TwistedからPyGameメインループを呼び出します。これは、TCP、UDP、またはソケットを使用する他のプロトコルでも同様に機能します。

関連する問題