我有一个关于如何在(新)Firefox 扩展和现有 C# 代码之间构建通信的问题。
Firefox 扩展将使用配置数据并生成其他数据,因此需要从某处获取配置数据并将其输出保存在某处。数据由现有的 C# 代码生成/使用,因此我需要决定扩展应如何与 C# 代码交互。
一些相关因素:
- 它只在 Windows 上运行,在相对受控的公司环境中。
- 我在机器上运行了一个 Windows 服务,用 C# 构建。
- 出于其他原因,将数据存储在本地数据存储(如 sqlite)中会很有用。
- 数据量很低,例如每隔几分钟就有 10kb 的未压缩 xml,而且不是很“健谈”。
- 如果不是完全的话,数据交换大部分可以是异步的。
- 与所有项目一样,我的资源有限,所以想要一个相对简单的选项。
- 它不必是超高性能,但不应该增加显着的开销。
- 我正计划在 javascript 中构建扩展(尽管如果真的有必要,可以另外说服)
我正在考虑的一些选项:
- 使用 XPCOM 到 .NET/COM 的桥接器
- 使用 sqlite db:扩展将从中读取并保存到其中。c# 代码将在服务中运行,填充数据库,然后处理服务创建的数据。
- 使用 TCP 套接字在扩展和服务之间进行通信。让服务管理本地数据存储。
我对 (1) 的问题是我认为这会很棘手而且不容易。但我可能完全错了吗?我看到(2)的主要问题是sqlite的锁定:一次只有一个进程可以写入数据,所以会有一些阻塞。但是,通常拥有一个本地数据存储会很好,因此如果性能影响不是太大,这是一个有吸引力的选择。我不知道(3)是否会特别容易或困难......或者采用什么方法来处理协议:自定义或http。
对这些想法或其他建议有何评论?
更新:我打算用 javascript 而不是 c++ 构建扩展