Python:如何托管websocket并在不阻塞的情况下与串行端口进行交互



我正忙于开发一个使用web-sockets从串行端口发送/接收数据的Python系统。

为此,我需要在收到来自串行端口的数据时做出反应。问题是检测串行端口需要不断查询的传入数据以查找传入数据。很可能是一个连续循环。从以前使用 Flask 的经验(磁盘访问速度慢 + 流量大)来看,这听起来可能会导致 Web 套接字被阻止。会是这种情况还是有解决方法?

我已经研究了NodeJS如何与串行端互,它似乎更好。当有传入数据时,它会引发一个事件,而不是一直查询它。这是 Python 中的一个选项吗?

额外详情:

  • 目前,它只能在Linux上运行。(拉斯比安)
  • Flask是我的第一个选择,但我对其他Python框架持开放态度。
  • 用于串行连接的 pyserial 。(是我所知道的唯一选择)

Python 在 stdlib 中提供了 select 模块,它可以做你想做的事。不过,这取决于您使用的操作系统。因此,由于您没有提供这些信息,因此我不能提供帮助。然而,在Linux下一个简单的例子是:

import select
epoll = select.epoll()
# Do stuff to create serial connection and websocket connection
epoll.register(websocket_file_descriptor, select.EPOLLIN)
epoll.register(serial_file_descriptor, select.EPOLLIN)
while True:
    events = epoll.poll(1)
    # Do stuff with the event, 
    for fileno, event in events:
        if fileno == serial_file_descriptor:
            data = os.read(serial_file_descriptor)
            os.write(websocket_file_descriptor, data)
        elif fileno == websocket_file_descriptor:
            data = os.read(websocket_file_descriptor)
            # Do something with the incoming data

这是一个基本的、不完整的例子。但它应该让你了解使用像epoll这样的系统的一般过程。

只需启动一个子进程,该子进程侦听串行套接字并在有消息时引发事件。 为每个 Web 端口设置一个单独的子进程,该子进程执行相同的操作。

相关内容

  • 没有找到相关文章

最新更新