Raspberry Pi 3 & Python 開発ブログ☆彡

Raspberry Pi 3の使い方、設定をわかりやすく解説。Raspberry Pi3 Model B(Element14版)、Raspbian 8.0(NOOBS Ver1.9.2)を使用して開発中。

【スポンサーリンク】

WebSocket通信の仕方(サーバー側)

【スポンサーリンク】

今回はPythonでWebSocket通信をする方法を紹介したいと思います。WebSocketとはWebサーバーとWebブラウザで双方向通信するため規格です。WebSocket通信を使うと、Webページの値(センサー取得値等)をリアルタイムで更新することができます。それではコードを紹介します。まずはサーバー側です。

構成

サーバー:Raspberry Pi IPアドレス 192.168.1.10 使用ポート:9999
クライアント:Raspberry Pi IPアドレス 192.168.1.10 使用ポート:9999

Raspberry Piをふたつ用意できなかったので、サーバーもクライアントも同じRaspberry Piです。もちろんサーバーとクライアントを別々の端末にすることも可能です。

サーバー側のコードのファイル名 ⇒ wsserver.py、クライアント側のコードをファイル名 ⇒ wsclient.pyとして作成します。

モジュールのインストール

下記ページのモジュールを使います。インストールは、pipでコマンドを実行します。

https://github.com/Pithikos/python-websocket-server

sudo pip3 install websocket-server

※pip3のインストールでエラーが出る場合は、sudo easy_install3 -U pipコマンドを試してみてください。

サーバー側のコード

from websocket_server import WebsocketServer

def new_client(client, server):
    server.send_message_to_all("Hey all, a new client has joined us")

def send_msg_allclient(client, server,message):
    server.send_message_to_all("Hey all:"+message)

server = WebsocketServer(9999, host='192.168.1.10')
server.set_fn_new_client(new_client)
server.set_fn_message_received(send_msg_allclient)
server.run_forever()

それではコードの説明をします。

 

・server = WebsocketServer(9999, host='192.168.1.10')

⇒サーバーのIPアドレスとポート番号を引数にして、WebSocketServerクラスをnewします。

 

・server.set_fn_new_client(new_client)

⇒クライアントが接続したときに、呼ばれる関数を定義します。今回の場合は、クライアントが接続したときに、引数で指定したnew_clientという関数が呼ばれます。new_client関数では、すべてのクライアントに"Hey all, a new client has joined us"とメッセージを送信するコードが書かれています。

 

・server.set_fn_message_received(send_msg_allclient)

⇒クライアントからメッセージを受信したときに呼ばれる関数を定義します。今回の場合は、メッセージを受信したときに、引数で指定したsend_msg_allclientという関数が呼ばれます。send_msg_allclient関数では、すべてのクライアントに受信したメッセージを送信するコードが書かれています。

 

・server.run_forever()

⇒WebSocketサーバーを起動します。

 

これでクライアントからサーバーにメッセージを送ると、サーバーはそのメッセージを接続している全てのクライアントに送信します。

これでWebSocketのサーバー側のコードは完成です。次回はクライアント側のコードについて紹介します。