我正在研究 Django Web 应用程序的后端,该应用程序还必须使用 TCP 通信通过 GPRS 与现场的传感器设备进行套接字 I/O。
我已经成功地使用 python 模块从设备获取数据asyncore
。我一直在做的是将设备配置为通过 TCP 将数据发送到服务器,然后我会使用asyncore
(我选择它是因为它是套接字 i/o 的异步方法)来获取这些传入数据。
文档讨论了重载asyncore.dispatcher
orasyncore.dispatcher_with_send
以便能够在回调中实现自定义操作,如handle_write
,handle_read
等。
目前,可以通过方法中的pickup来获取传入的数据handle_read
,但是最近出现了一个新的需求:
当设备连接到服务器时,它需要能够保持连接,以便我们可以向它发送一些命令(比如要求它识别自己),然后在发现真实的情况下继续使用它发送的数据。
所以,我handle_write
在我的实现中的方法中添加了代码,将“识别你自己”命令发送到与我们连接的设备。但我的问题是,即使设备继续连接并且handle_read
显示我可以获得传入数据,这段代码也永远不会执行!
我尝试输入“识别自己”代码(发送一些如下所示的十六进制命令)
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
在我保留之前发送的数据时会收到响应,但这失败了!我能做些什么?
什么是更好/最好的方法来实现这一目标?