TCP 通信を使用して GPRS 経由で現場のセンサー デバイスとソケット I/O を行う必要がある Django Web アプリのバックエンドに取り組んでいます。
python module を使用して、デバイスからデータを取得することに成功しましたasyncore
。私が行ってきたことは、TCP 経由でサーバーにデータを送信するようにデバイスを構成することでした。次に、この受信データを使用して取得しましたasyncore
(ソケット i/o への非同期アプローチのために選択しました)。
、 などのコールバックでカスタムアクションを実装できるようにするために、 asyncore.dispatcher
orをオーバーロードすることについてのドキュメントの話。asyncore.dispatcher_with_send
handle_write
handle_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
以前に送信されたデータを保持している間に応答が返ってくることを期待していますが、これは失敗します! 私に何ができる?
これを実現するためのより良い/最良の方法は何ですか?