如何使用 Future 或 .net async 或其他编写 tcp 服务器?

How to write a tcp server use Future or .net async or others?

是的,tcp 服务器有很多示例,但我找不到一个使用 scala future 或 c#/f# async/awite

future/async适合写一个简单的tcp服务器,比如echo server吗?

或者如果有像smtp这样的server/client模块,服务器和客户端会在一个session中对话很多次(helo/ok from/ok rcpt/ok data/ok quit/ok), future 或 async 适合这个模型吗?服务 A 是否有可能首先从客户端 A 获得 HELO,然后使用其他 smtp 命令(如“邮件来自”)与客户端 B 交谈?

在哪里可以找到回显服务器使用 Future 或 async/awit/Task 的示例代码?

谢谢!

TCP 服务器是相当复杂的野兽,并且由于数据是一个流(不是一系列有界数据包),它通常不直接服从 只是 一个“等待”一些数据”API。原始套接字 API 具有异步组件,但它不是您通常期望的形状。

Kestrel 可用于使用“管道”API 构建异步 TCP 服务器,它处理后台缓冲区管理等所有事情(当您还不能使用不完整的框架)-我有一个 blog series here on that,但是:没有 官方 客户端 API 存在(还)用于“管道” ;同样,同一个博客系列讨论了如何使用 Pipelines.Sockets.Unofficial 弥合这一差距。

但是!我想知道您真正想要的是一个位于TCP层之上的消息传递库,因此您可以 只需说“发送消息”和“等待回复消息”即可。许多这样的库存在,但它们总是会改变底层数据协议的形状,因为它们将引入“框架”等。这意味着如果您打算实现一个预先存在的协议,它们可能不是合适的选择(作为选择不会对齐)。