javascript - 如何建立从浏览器扩展到 qt 的实时通信
问题描述
我正在开发一个 Firefox 扩展,它需要系统端软件和 Web 之间的实时连接。
我的意思是,我想要这样的东西
在扩展
var observer = new MutationObserver(function(childList){sendToQt(JSON.stringify(childList))})
observer.observe(myElement,{childList:true})
在qt应用程序中。
public signals:
void messageReceived(QString message)
connect(myobject, &MyClass::messageReceived,this,&ThisClass::logMessage)
void logMessage(QString message){
std::cout<<message.toStdString()<<endl;
sendMessageBack(recieved)
}
当变异观察者观察到的变异用扩展初始化时,它必须作为字符串消息发送到 qt,并从 qt 响应扩展。我对python套接字非常熟悉。但它似乎不适用于这样的项目。基本上它是通过第一个 firefox 扩展构建,我对 firefox 为扩展提供的设施不太熟悉。有没有这样的技术可以在 qt 和我的扩展之间建立实时通信。
解决方案
使用 Qt 和浏览器扩展支持的简易 IPC:
- Websockets:简单,双向,可以传递 JSON
- A local HTTP/S API : 更花哨和结构化,如果你只想要本地 IPC 可能更麻烦
网络套接字
- Qt:在您的 Qt 应用程序中创建一个
QWebSocketServer
,并连接到通常的信号。有关实际示例,请参阅“Echo Server”中的 Qt WebSocket 示例。 - Qt:
QJson
用于编码和解码 - Firefox 扩展:在您的 Firefox 扩展中创建一个
new WebSocket(<url>)
,并连接到locahost
您在 Qt 应用程序中定义的端口/路径。这是一个使用 Firefox 的 WebSockets 的示例扩展 - 两人交流愉快!
HTTP/S API
你明白了,在这种情况下,你使用Mangoose、RESTinio或CppRestSDK等第三方库。
为方便起见,还存在一些开源 Qt 替代方案,但可能会随着其他项目的成熟。Qt 官方 HTTP 服务器不在主线 Qt 5 版本 AFAIK 中。
推荐阅读
- c# - 将 CPCL 发送到 Zebra 打印机的 .NET 代码不打印特殊字符
- php - 执行 Google Sheets API php Quickstart 授权时出现 Http Err 500
- postgresql - 如何为 Postgresql 安装多维数据集功能
- javascript - 如何获取对象中布尔值的计数
- google-api - 如何获取尚未将 Google Chat Bot 添加到其覆盖范围的用户的空间 ID
- sql - Hibernate 上的 JPA 本机查询以获取不同的列
- javascript - 如何在 django 框架中将各种用户的多条推文嵌入到 HTML 中?
- angular - 有没有办法在 Typescript 和 Angular 中为“let variable”类型输入提示 IDE?
- c# - 缺少 Microsoft.Gestures.Endpoint.dll 和 Microsoft.Gestures.Protocol.dll
- java - 在 Java 按钮上显示图像