8

Twisted の非同期設計で何かが欠けているのかもしれませんが、sendMessage() メソッドを「外部から」呼び出す方法が見つからないようです。つまり、Twisted/AutobahnWebsockets のコールバック メソッド (onOpen や onMessage() でサーバーからデータを受信するときなど) だけでメッセージを送信することはありません。

もちろん、スレッドを起動して my_protocol_instance.sendMessage("hello") を呼び出すこともできますが、それでは非同期設計のすべての目的が無効になりますよね?

具体的な例では、接続を開いて管理するトップ ラッパー クラスが必要であり、必要なときはいつでも my_class.send_my_toplevel_message(msg) を呼び出します。どうすればこれを実装できますか?

私の説明が明確であることを願っています。

ありがとう

4

2 に答える 2

3

protocolInstance.sendMessage() を起動するためにスレッドが必要なのはなぜですか? これは、通常のリアクター ループで実行できます。

ツイストのコアはリアクターであり、ツイスト自体が反応的であると考えると、物事をより簡単に見ることができます。つまり、何か他のものへの反応 (応答) として何かを行います。

ここで、あなたが話しているスレッドも、特定のイベント、アクティビティ、またはステータスのために sendMessage の呼び出しで作成および作成されると想定しています。反応する理由もなく、突然メッセージを送信する必要がある場合はほとんど想像できません。

ただし、sendMessage をトリガーするイベントがある場合は、スレッドでそれを呼び出す必要はありません。ねじれたメカニズムを使用してそのイベントをキャッチし、その特定のイベントのコールバックから sendMessage を呼び出すだけです。

具体的な例に移りましょう。この質問の文脈で「必要なときはいつでも」が正確に何を意味するかを指定できますか? 別の接続からの入力?ユーザーからの入力?ループ活動?

于 2013-09-20T09:19:37.947 に答える