在Python中使用asyncore或替代方法的双向套接字I/O

问题描述:

我正在Django Web应用程序的后端工作,该应用程序还必须通过使用TCP通信的GPRS在现场通过传感器设备执行套接字I/O。在Python中使用asyncore或替代方法的双向套接字I/O

我成功地从使用python模块asyncore的设备获取数据。我一直在做的是配置设备通过TCP发送数据到服务器,然后使用asyncore(我选择它是因为它是异步处理套接字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

我不能给你一个完整的答案,但如果你不知道它,你可能想看看[Twisted framework](http://twistedmatrix.com/)的工作是这样的: ) – detly

+0

请粘贴您当前使用的代码,您可能需要缓冲您需要发送的数据。 –

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