nativemessaging 应用程序和 webextension 之间的异步双向消息传递?

标签 asynchronous firefox-addon-webextensions bidirectional chrome-native-messaging

看来 Nativemessaging 的协议(protocol)意味着 native 应用程序通过阻止先读后写循环与扩展进行通信。

首先,这是正确的吗?

如果是这样,那么就很难在双方之间建立双向异步通信。

在我开始做一些非常复杂的事情来解决这个限制之前,是否有一些简单的 API 可以实现与 native 应用程序的双向异步消息传递?


我想支持的事情:

  • 基于连接的本地消息传递(即:长时间运行)
  • 来自任一端的异步响应请求
  • 来自任何一端的没有响应的通知

我第一个“愚蠢复杂”的想法是:

  1. 使用 Nativemessaging 启动 native 应用程序并管理其生命周期
  2. 在启动时让 native 应用程序启动 WebSocket server并使用其中的 Webextension 使用的 WebSocket URI 响应第一个请求

最佳答案

有点晚了,但对于我正在处理的扩展,我能够调整 mdn page 上的示例您提到了消除 stdin 读取中的阻塞(到目前为止,stdout 写入似乎是非阻塞的,但我认为如果那不正确,同样的想法也适用于它们)

我在 Windows 上工作,所以很多其他 SO 帖子建议使用 select这个模块不适合我。我已经设置好使用 asyncio在发现这个之前在我的项目中,所以 this SO post 的答案指示我 this page建议使用 loop.run_in_executor处理这些情况的方法(据我所知,这会从主事件循环创建一个单独的线程,而不是它被阻塞)。使用该方法包装从示例中读取的 stdin.buffer 为我消除了阻塞。

关于nativemessaging 应用程序和 webextension 之间的异步双向消息传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46929317/

相关文章:

swift - 在 Swift 中创建异步 Action

python - python asyncIO如何暂停和恢复任务?

Firefox WebExtension 选项按钮不起作用

javascript - 如何在 moz 扩展页面上执行用户脚本?

JPA 双向关系中的一对一实体删除

java - 用于管理双向关联和反向更新的通用 Java 框架

python - 实现双向 A* 最短路径算法

javascript - 将属性添加到数组中 MongoDB 的对象并在响应中发送

c# - 多个等待操作或只有一个

javascript - 如何在 Linux 上的 Firefox 中启用复制到剪贴板?