【发布时间】:2014-03-29 00:14:58
【问题描述】:
我知道像 Edge.js 这样允许 C# 和 Node.js 连接的项目,但我说的是不同的东西。是否有用于 C# 的库,它允许您在 C# 中构建可扩展、非阻塞 I/O、单线程、异步事件服务器,类似于您可以使用 Node.js 构建的服务器?一个库,它还具有 Node.js 的独特事件模型、用于用户代码的单线程、用于文件/网络事件和本机代码的多线程(如果我错了,请纠正我)。当然,我了解 ASP 和 WCF,以及像 this 这样的 OSS 项目,但我正在寻找能够提供与 Node.js 相当的性能的东西,这是一种 Node.js 到 C# 的端口。你知道任何这样的库吗?构建它需要什么?
单线程还是多线程?
如果你想要一个单线程托管进程 所有使用 APC 和完成端口的工作,你将不得不 手动编码。建造它既冒险又棘手。 -- Sam Salton
显然,单线程使代码更容易编写,因为您不需要使用锁和互斥锁。只有一个线程读取/修改程序状态数据,使事情变得简单。所有计算都在单独的线程上进行,并在结果准备好后返回主线程。操作完成后,所有文件/网络事件都会分支并返回到主线程。
相关但不同的问题:
可能有用的项目:
- ALE 最接近我想要的,语法类似于 Node.js
- Manos de mono,用于 C# 的单线程服务器
- message loop in C#,在单个线程上处理事件
- C# 中的 Libuv 包装器(1、2)
- Anna 仅用于 HTTP 请求(无二进制),语法类似于 Node.js
【问题讨论】:
-
"是否有 C# 库,允许您在 C# 中构建可扩展、非阻塞 I/O、单线程、异步事件服务器,类似于您可以使用 Node.js 构建的服务器?”当您可以使用 async/await 编写更具可读性的异步代码时,为什么还要以基于事件的方式编写它? ;)
-
听起来你想让锤子像刀子一样工作,只是硬着头皮在 node 中编写你的应用程序。
-
仅供参考 - async/await 不会阻塞。
-
@Geotarget 会吗? Node 实际上只是 javascript,有大量的 C# 到 JS 转换器out there。此外,您可以利用边缘来弥补差距(我目前正在我的应用程序中这样做)。 “node.js 嵌套事件处理程序系统看起来更易于管理” - 我同意,确实如此,这就是为什么如果您真的想要利用您描述的所有功能真的很想把你的代码移植到 Node 上。
-
不幸的是,我不知道 CLI 的复杂性给你一个详细的答案,但是,有一些库允许你在 .NET 中有效地托管 V8 引擎(如果这是你的之后)喜欢Javascript.NET
标签: c# multithreading node.js networking