sknt

4歩進んで5歩戻る

WebSocketのserver・client処理(Python・JavaScript→Python・Python(Pygame)

2端末を利用した対戦ゲームを作成するために、WebSocketsを使い2端末で入力した情報を共有するコードを書いてみた。

 

参考にしたのは公式ドキュメントの「Manage application state」。

(参考URL)

 

 

公式ドキュメントには、状態の制御・管理(server側の処理)は「Python」、画面の表示・入力(client側の処理)は「JavaScript」で書かれている。

 

Pygame」でゲーム製作中なので、せっかくなので「JavaScript」で書かれている部分を「Pygame」で書き直してみた。

 

書き直したコードは下記のページに掲載

github.com

 

書き換えで苦労した箇所

参考元のclient側(JavaScript)では、他端末からの入力を「onmessage」イベントで検知して画面に反映させているが、「Python」で同じ処理、検知出来るイベントの書き方が分からなかった。

 

結局、client側では0.5秒毎にサーバに状態を確認し画面に反映させる繰り返し処理をさせ、server側で状態確認用の指令を受信、状態をclientに送信する処理を書き加えた。

 

課題

状態変更(value+1or-1)を高速で連続実行すると、画面に反映されるまでに時間がかかってしまう。この原因は、状態確認と状態変更のsend・receiveが同じwebsocketsを利用しているからである。 

    1. 画面状態確認:0.5秒毎にsend・receive処理
    2. 状態変更:  p または m 押下時にsend・receive処理

上記2「状態変更」連続実行中に1の状態確認が実行されると、1のreceive処理で2の状態変更でsendした情報が受信されてしまう。

 

どう改修すれば良いかは未だ検討中。