手动处理进程间通信非常耗时,而旧的替代方案 Edge.js自 2017 年中期以来一直没有更新。
我的组织维护了一个库Jering.Javascript.NodeJS,它允许您从 C# 调用Node.js。
示例用法
string javascriptModule = @"
module.exports = (callback, x, y) => { // Module must export a function that takes a callback as its first parameter
var result = x + y; // Your javascript logic
callback(null /* If an error occurred, provide an error object or message */, result); // Call the callback when you're done.
}";
// Invoke javascript in Node.js
int result = await StaticNodeJSService.InvokeFromStringAsync<int>(javascriptModule, args: new object[] { 3, 5 });
// result == 8
Assert.Equal(8, result);
您可以调用任何有效的 Node.js 模块,包括执行问题中列出的任务的模块:查询 Web 服务 (POST)、接收 XML 数据和操作该数据。
强调
跨平台支持
- 面向 .NET Standard 2.0 和 .NET Framework 4.6.1。
- 在 Windows、macOS 和 Linux 上测试。
性能特点
- 不会为每次调用启动新的 Node.js 进程。相反,通过进程间通信将调用发送到长期存在的进程。
- (可选)在 Node.js 进程集群中同时运行调用。处理集群的负载平衡。
- 尽可能缓存已编译的 javascript。
长期运行的应用程序支持
- 如果 Node.js 进程意外终止,则重新启动它们。
- (可选)在文件更改时重新启动 Node.js 进程。
- 当父 .Net 进程死亡时杀死 Node.js 进程。
灵活的 API
- 公开静态 API和基于依赖注入的 API。
string
支持以表单、Stream
表单或磁盘上的文件调用 javascript 。