我正在使用 PyBluez 通过蓝牙连接到设备。它工作得很好。该设备正在使用 SPP,我使用 BluetoothSocket (RFCOMM) 进行连接。
基本交互是:发送init命令->接收确认;发送开始命令 -> 接收连续数据;发送停止命令 -> ...
我需要能够从另一个应用程序控制应用程序:启动、停止......我在想 ZeroMQ 或者 Tornado 和 HTTP/REST ifc。
我不是很想把它做成一个多线程应用程序,因为我认为它有点过头了。我在 C#/.NET 中使用线程和它们的池进行了很多工作,但我有一种预感,这在这里并不是真正需要的。相反,我认为它会很混乱。
但是,我需要能够通过 ZeroMQ/REST/ 处理命令(例如“开始”、“停止”)......同时不断地接收数据并发送偶尔的数据包。
由于我对 Python 很陌生,我不确定如何实现这一点。我有几个想法:BluetoothSocket 可以连接到 ZeroMQ/Tornado IOLoop 吗?
我假设我可以使用 Twisted 完成几乎任何事情,但我并不真正需要 Twisted 提供的一切。如果我需要加入 Twisted,我会这样做。我实际上找到了 BluetoothSocket 的 Twisted实现。但是,我需要 Twisted 吗?
我试过使用 Tornado IOLoop。没有抛出异常,但另一方面没有数据被接收或发送:
def eventhandler(s, events, error = None):
if events & ioloop.IOLoop.READ:
print 'Socket read: %r' % s.recv(1024)
elif events & ioloop.IOLoop.ERROR:
print 'Socket error!'
events = ioloop.IOLoop.READ | ioloop.IOLoop.ERROR
self._loop.add_handler(self._socket.fileno(), eventhandler, events)
我真的不知道我现在在做什么。我最终会找到一种方法,但需要一个关于前进方向的提示。
广泛的 Google-fu 没有找到太多有用的信息,所以我现在在这里问。
编辑:我目前正在查看“gevent”。至少看起来比 Twisted 简单。