ネットワークアプリケーションを開発することで、ツイストハーフウェイを発見しました。私は生のソケット通信を使って動作するクライアントとサーバーを持っていましたが、サーバー側で非同期に複数の接続を処理するためにTwistedを使用することを選択しました。ねじれたサーバーは、それに接続して、次の生のソケットのクライアントクラスで正常に動作します:私が何をしたいのですがどのような非同期ツイスト通話を使用する同期クライアントのリファクタリング
class Client:
def __init__(self, backend, port=22220):
import socket
self.role_buf = 4096
self.buf = 1024
self.addr = (backend, port)
self.TCPSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.TCPSock.connect(self.addr)
def getRoleList(self):
self.TCPSock.send("RLP")
data = self.TCPSock.recv(self.role_buf)
return data.split("|")
def getServer(self, roleindex=0):
self.TCPSock.send(roleindex)
ip = self.TCPSock.recv(self.buf)
self.TCPSock.close()
return ip
ツイストのクリーンソケットや原子炉の抽象化を使用してクライアントのコードをリファクタリングです。私はQtベースのクライアントGUI(PyQtを使用)でクライアントクラスをインスタンス化して、PyQtベースのクライアントコードからgetRoleList()
とgetserver()
を呼び出すことで、イベントドリブン(非同期)入力を収集することができます。私はPyQtソケット/原子炉の実装を使用したくないので、ネットワーク通信に単一のライブラリを使用したいと思います。
これは可能ですか、もしそうなら、どうすればいいですか?私はそうすべきだと思っていますが、これらを含めてツイストの文書を研究して読んでいる間にかなりの時間を費やしてしまったのです。excellent tutorials解決策を実行する方法を正確に把握できないようです。たぶん私は何かばかげていると私は手を打つ必要がありますか?
典型的なサーバ/クライアントとの対話:
サーバは常にポート22220をリスニングしている、そしてそれは、クライアントから「ロールリスト要求」を受信したとき、それはへの役割の選択肢の(ダイナミック)のリストですプッシュクライアント。次に、クライアントはGUIでこれらの役割の選択肢をユーザーに表示し、ユーザーが望む単一の役割を選択すると、クライアントはその要求をサーバーに戻します。次に、サーバーはユーザーの特定の選択に適したデータで応答します。特に
http://twistedmatrix.com/documents/current/core/howto/index.html
:
これは私が実際に実装したいことではありません - 私が理解する限り、クライアントブロックはサーバーからのデータに依存しているので必要です。また、qt4reactorプロジェクトはほとんど存在しないように見えます。 – chisaipete
応答を保持するGUIが必要な場合は、ネットワークIOでブロックすることはできません。最先端のGUIアプリケーションは、すべて非ブロッキングであり、メインスレッド上でイベント駆動されます。その原子炉に関しては、それがどれほど古いかは関係ありません - それは機能します。 TwIstedに同梱されていない唯一の理由は、GPLに関する懸念であった。それ以外の場合は、正常に動作します。 –
あなたの提案を受け取り、あなたが提案した手法を使って実装を開始した後、あなたのコメントを完全に理解しています。 :) – chisaipete