2

TCP 通信を使用して GPRS 経由で現場のセンサー デバイスとソケット I/O を行う必要がある Django Web アプリのバックエンドに取り組んでいます。

python module を使用して、デバイスからデータを取得することに成功しましたasyncore。私が行ってきたことは、TCP 経由でサーバーにデータを送信するようにデバイスを構成することでした。次に、この受信データを使用して取得しましたasyncore(ソケット i/o への非同期アプローチのために選択しました)。

、 などのコールバックでカスタムアクションを実装できるようにするために、 asyncore.dispatcherorをオーバーロードすることについてのドキュメントの話。asyncore.dispatcher_with_sendhandle_writehandle_read

現在、メソッドで取得することで受信データを取得できhandle_readますが、最近新しい要件が発生しました。

デバイスがサーバーに接続するときに接続を保持できる必要があります。これにより、デバイスにいくつかのコマンドを送信し (デバイス自体の識別を要求するなど)、その後、本物であることが判明した送信データを引き続き使用できます。

そのため、実装のメソッドにコードを追加しました。これはhandle_write、「自分自身を識別する」コマンドを、接続されているデバイスに送信するためのコードです。しかし、私の問題は、デバイスが接続し続けていてhandle_read、着信データを取得できることを示している場合でも、このコードが実行されないことです!

「自分自身を識別する」コードを入れてみました(以下のような16進コマンドを送信します)

print 'Attempting to Identify Remote Party...'
self.send('\x40\x40\x00\x11\x12\x34\x56\xFF\xFF\xFF\xFF\x90\x01\x41\xCF\x0D\x0A')

handle_read以前に送信されたデータを保持している間に応答が返ってくることを期待していますが、これは失敗します! 私に何ができる?

これを実現するためのより良い/最良の方法は何ですか?

4

1 に答える 1

0

いくつかのコマンドといくつかのデータ交換を含むプロトコルを実装している場合は、asyncoreと一緒にasynchatライブラリを使用することをお勧めします。

于 2011-07-07T05:16:20.667 に答える