2017-07-06 19 views
2

私は次のようにサーバーをしました: -Python Twisted - 接続されたソケット接続を介してデータを送信するにはどうすればいいですか?

class MyServerProtocol(WebSocketServerProtocol): 

    def onConnect(self, request): 
     print("Client connecting: {0}".format(request.peer)) 

    def onOpen(self): 
     print("WebSocket connection open.") 

    def onMessage(self, payload, isBinary): 
     self.sendMessage(payload, isBinary) 

    def onClose(self, wasClean, code, reason): 
     print("WebSocket connection closed: {0}".format(reason)) 

上記のコードは、メッセージを受信して​​、戻って同じメッセージで応答します。しかし、私のユースケースは異なります。

私はいくつかのデータを処理してDBに格納し、最後にデータを接続されたクライアントに送信するか、特定のタイプのデータを特定の接続クライアントに送信し、もう一方のタイプを別のタイプに送信します。

どうすればいいですか? sendMessageをクラス外でどのように呼び出すことができますか?

答えて

0

接続を追跡するには、WebSocketServerFactoryをサブクラス化する必要があります。

このexampleを見ると、すべての開いている接続がリストに格納され、すべての接続がブロードキャストされます。特定のクライアントに特定のメッセージを送信するように簡単に調整できます。

+0

お返事ありがとうございます@Henry。コードで遊んでいる間、私は2つの状況(疑念)につまずいた。 1)DBにデータを保存するAPIエンドポイントがある状況を考えてみましょう。 'post_save'シグナル(Django)では、datを接続されたクライアントにブロードキャストします。どうしたらいいですか? '2)'なぜ '9000'と' 8080'の2つのポートがありますか? – PythonEnthusiast

+0

APIエンドポイントはDjangoアプリケーションのWebsocketsエンドポイントかHTTPエンドポイントですか? WebsocketsメッセージまたはHTTP要求によってデータが保存されていますか? –

+0

HTTPリクエスト... – PythonEnthusiast

0

raw WebSocketの代わりにWAMPを使用したくないですか?

「興味のあるクライアントへのブロードキャスト情報」は、パブリッシュ/サブスクライブパターンのためのものです。

+0

私はそれについて読むことができる任意のリンクを使用することを検討? – PythonEnthusiast

+0

http://crossbar.io/ – meejah

関連する問題