c# - 适用于 .NET 的 Node.js

标签 c# multithreading node.js networking

我知道像 Edge.js 这样的项目允许 C# 和 Node.js 连接,但我说的是不同的东西。是否有适用于 C# 的库,允许您在 C# 中构建可扩展、非阻塞 I/O、单线程、异步事件服务器,类似于您可以使用 Node.js 构建的服务器?一个库,它还具有 Node.js 的独特事件模型,单线程用于用户代码,多线程用于文件/网络事件和 native 代码(如果我错了请纠正我)。我当然知道 ASP 和 WCF,以及像 this 这样的 OSS 项目。 ,但我正在寻找能够为您提供与 Node.js 相当的性能的东西,一种 Node.js 到 C# 的端口。您知道任何这样的库吗?构建它需要什么?

单线程还是多线程?

If you want a single threaded managed process that does all its work using APC and completion ports, you are going to have to hand code it. Building it would be risky and tricky. -- Sam Salton

显然,单线程使代码更易于编写,因为您不需要使用锁和互斥锁。只有一个线程读取/修改程序状态数据,这让事情变得简单。所有计算都发生在单独的线程上,并在结果准备好后返回主线程。所有文件/网络事件在操作完成后分支并返回主线程。

相关但不同的问题:

  1. Non-blocking single threaded web server
  2. Minimal web server
  3. Single threaded async events

可能有用的项目:

  1. ALE最接近我想要的,语法类似于 Node.js
  2. Manos de mono ,用于 C# 的单线程服务器
  3. A message loop in C# , 在单个线程上处理事件
  4. C# 中的 Libuv 包装器(12)
  5. Anna仅用于 HTTP 请求(无二进制),语法类似于 Node.js

最佳答案

我已经将此发布到您的第一个相关问题,它也可以回答您的问题:

这是一个用 VB.NET 和 C# 编写的开源示例:

https://github.com/perrybutler/dotnetsockets/

它使用基于事件的异步模式(EAP)、IAsyncResult 模式和线程池(IOCP)。它将消息(消息可以是任何 native 对象,例如类实例)序列化/编码为二进制数据包,通过 TCP 传输数据包,然后在接收端反序列化/解码数据包,这样您就可以使用 native 对象.这部分有点像Protobuf或RPC。

它最初是作为实时多人游戏的“网络代码”开发的,但它可以用于多种用途。不幸的是我从来没有抽出时间使用它。也许其他人会。

源代码有很多注释,所以应该很容易理解。享受吧!

关于c# - 适用于 .NET 的 Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22036802/

相关文章:

c# - 正则表达式不匹配数字后跟某个字符

objective-c - UIManagedDocument 在后台线程中插入对象

c++ - 与模板一起使用的最佳 C++ 代码覆盖率工具是什么?

node.js - MongoDB : How to multiply a field that appears only in $project?

node.js - 如何在Socket.io客户端中丢弃传入事件

javascript - 我的 Node 脚本在函数完成后挂起

c# - .NET Entity Framework 与复制的 SQL 服务器的使用

c# - 使用 XDocument 计算子元素的数量

c# - ImmutableList<T> 检查并删除

c++ - 显示 std::thread 函数传递的错误数据。