Python中的异步双向套接字I/O或替代方案

2 投票
1 回答
745 浏览
提问于 2025-04-16 19:59

我正在开发一个Django的后端网页应用,这个应用需要通过GPRS和传感器设备进行TCP通信。

我已经成功地使用Python的asyncore模块从设备获取数据。我做的就是配置这些设备,让它们通过TCP把数据发送到服务器,然后我用asyncore来接收这些数据(我选择这个模块是因为它在处理socket输入输出时是异步的)。

文档中提到要重载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

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

撰写回答