2011-08-06 14 views
3

バイナリプロトコルを実装するnode.jsにTCPサーバを作成しました。 バッファを使用すると、これはnode.jsで非常に簡単でした。 http://nodejs.org/docs/v0.5.3/api/buffers.htmlバイナリプロトコルをPythonで実装する(ツイスト)

私は、twistedを使ってPython 2.7で私のプロトコルを実装するのと同様の方法を探しています。 しかし、python 3と何らかのイベントが発生したI/Oを組み合わせた作業のためのツールがあれば教えてください。 Python 3のバイトオブジェクトのため、最初はPython 3がバイナリプロトコルを扱う方が優れています。私は多くのTCP(とUDP)接続を処理し、少しのGUIを書く必要があります。ここで

は、Node.jsの中で私のプロトコルを実装する方法は次のとおりです。

var buf = new Buffer(5+data.length), //headers + data (data is also a buffer) 
    action = 0x01; 

buf[0] = action; 
buf.writeUInt16(data.length,1,'big'); //write content length in at offset 1 
buf.writeUint16(12345,5,'big');  //message identifier at offset 3 
data.copy(buf,5);      //copy data into message at offset 5 

socket.write(buf); 

私はPythonで同様の指示を達成する方法について例をいただければ幸いです。

編集:

self.transport.write(struct.pack('!bHH',action,data.length, sock_id) + data) 
+0

完全にカスタムなものを考案するのではなく、Nodeに既存のプロトコルを実装することができます。 AMPはTwistedのメッセージベースのプロトコル構築キットで、他のシステムとの連携が非常に簡単に設計されています。それを標準化する作業については、http://amp-protocol.net/を参照してください。 – Glyph

答えて

3

それは何が必要でしょう標準のPython structモジュールのような音:これは私がPythonの構造体のモジュールを使用して、私のプロトコルを実装することができた方法です。バイナリデータのレイアウトを正確に指定することができます。

Python 2とPython 3でバイナリプロトコルを処理する機能は同等です。

+0

Twistedで使用できますか? – Baversjo

+0

私はなぜそうは見ません。 –

+0

http://construct.wikispaces.com/ –

0

効率が重視されていて、つまりXORのようにバイト全体を処理したい場合は、バイトの可変配列であるPython bytearrayを見たいと思うでしょう。

0

structモジュールでもう少し抽象化したい場合は、protlibを試してみてください。素敵なことは、単一のフィールドではなく、箱からPythonオブジェクトを扱うことができるということです。