正在研究Django网络应用程序的后端,该应用程序还必须通过GPRS使用TCP通信在现场使用传感器设备进行套接字I / O.
我成功地使用python模块asyncore
从设备获取数据。我一直在做的是配置设备通过TCP将数据发送到服务器,然后我将使用asyncore
(由于它是对socket i / o的异步方法而选择)来获取这些传入数据。
文档讨论了重载asyncore.dispatcher
或asyncore.dispatcher_with_send
,以便能够在handle_write
,handle_read
等回调中实现自定义操作。
目前,我可以通过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
收到响应,但这会失败!我该怎么办?
什么是更好/最好的解决方法?
答案 0 :(得分:0)
如果您正在实现一个具有一些命令和一些数据交换的协议,那么最好将asynchat库与asyncore一起使用。