带有asyncore的双向套接字I / O或Python中的替代方案

时间:2011-06-21 09:33:34

标签: python socket.io asyncore two-way

正在研究Django网络应用程序的后端,该应用程序还必须通过GPRS使用TCP通信在现场使用传感器设备进行套接字I / O.

我成功地使用python模块asyncore从设备获取数据。我一直在做的是配置设备通过TCP将数据发送到服务器,然后我将使用asyncore(由于它是对socket i / o的异步方法而选择)来获取这些传入数据。

文档讨论了重载asyncore.dispatcherasyncore.dispatcher_with_send,以便能够在handle_writehandle_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收到响应,但这会失败!我该怎么办?

什么是更好/最好的解决方法?

1 个答案:

答案 0 :(得分:0)

如果您正在实现一个具有一些命令和一些数据交换的协议,那么最好将asynchat库与asyncore一起使用。