在Python中使用asyncore或替代方法的双向套接字I/O
问题描述:
我正在Django Web应用程序的后端工作,该应用程序还必须通过使用TCP通信的GPRS在现场通过传感器设备执行套接字I/O。在Python中使用asyncore或替代方法的双向套接字I/O
我成功地从使用python模块asyncore
的设备获取数据。我一直在做的是配置设备通过TCP发送数据到服务器,然后使用asyncore
(我选择它是因为它是异步处理套接字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
进来,而我守住先前发送的数据,但是这失败了!我能做什么?
什么是最好的/最好的方法来解决这个问题?
答
如果您正在实现一个有一些命令和一些数据交换的协议,那么最好使用asynchat库和asyncore一起使用。
我不能给你一个完整的答案,但如果你不知道它,你可能想看看[Twisted framework](http://twistedmatrix.com/)的工作是这样的: ) – detly
请粘贴您当前使用的代码,您可能需要缓冲您需要发送的数据。 –