【问题标题】:Two-way Socket I/O with asyncore or alternative in Python在 Python 中具有异步或替代的双向套接字 I/O
【发布时间】:2011-06-21 09:33:33
【问题描述】:

我正在开发 Django Web 应用程序的后端,该应用程序还必须使用 TCP 通信通过 GPRS 与现场的传感器设备进行套接字 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 得到响应,但这失败了!我能做什么?

有什么更好/最好的方法来实现这一目标?

【问题讨论】:

  • 我不能给你一个完整的答案,但如果你不知道,你可能想看看Twisted framework这样的工作:)
  • 请粘贴您当前使用的代码,您可能想缓冲需要发送的数据。

标签: python socket.io asyncore two-way


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 2021-01-15
    • 1970-01-01
    • 2010-09-12
    • 2012-07-29
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多