内容简介:使用Freya构建F# Web服务器
Freya 是一个专注于HTTP原语和并发的F# Web框架,其中并不提供模板等接口结构(construct)。在F# eXchange 2017大会上, Marcus Griep介绍了Freya 的核心模型。并展示了多种用于性能和并发的机制,例如与Hopac和Kestrel的集成。
Freya支持多种托管配置。它可以直接使用dotnet run以自托管应用运行,也可以在Kestrel上运行。Freya同时支持.NET Framework和.NET Core。
出于性能上的考虑,Griep推荐在Kestrel上运行Freya,这样能有效地利用Kestrel的多种优化机制。根据他所给出的基准测试结果,在ASP.NET上运行经典的“Hello World”应用,耗时6毫秒。对于在Hopac上运行的Freya,耗时13毫秒。而对于F# Async上运行的Freya,则需要26毫秒。
上面的基准测试表明,相比于F# Async, Hopac 可以显著地提高性能。Hopac使用了一种多线程的协同模式,而非抢占式(preemptive)。协同调度产生更少的上下文切换,进而可更加高效地使用CPU。但是种方式并不适于执行长时间运行的任务,因为这些贯穿始终的任务可能会饿死其它等待执行的任务。
Freya编程模型意在提供一种对HTTP的安全抽象。Freya计算表达式 是对OWIN状态的抽象 。下面给出一个基本例子,实现获取查询字符串的参数,并返回一个结果:
let name_ = Route.atom_ "name"
let name =
freya {
// 获取查询字符串参数“name”。
let! name = Freya.Optic.get name_
match name with
| Some name -> return name
| None -> return "World" }
let sayHello =
freya {
let! name = name
return Represent.text (sprintf "Hello, %s!" name) }
Freya machine是一种对决策树的抽象。其中的一个决策表示的是部分HTTP规则,例如“是否存在CORS头部?”。一个完整的决策树中可能包含上百个决策,并且还可进一步扩展。machine同样具有自动优化特性,可裁剪所有与给定配置无关的决策。
Freya machine还可以使用计算表达式定义。继续上面给出的例子,下面代码中的machine设置了与HelloWorld响应的条件。
let helloMachine =
freyaMachine {
methods [GET; HEAD; OPTIONS]
handleOk sayHello }
例子代码的最后部分,绑定machine到route:
let router =
freyaRouter {
resource "/hello{/name}" machine }
本文使用 StackEdit 编写。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Python 之构建代理服务器
- 《高性能linux服务器构建实战》
- 使用Gulp构建本地开发Web服务器
- 重新思考使用无服务器构建软件的方式
- 使用 Solr 构建企业级搜索服务器
- 利用LXD容器构建共享的GPU服务器
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python Algorithms
Magnus Lie Hetland / Apress / 2010-11-24 / USD 49.99
Python Algorithms explains the Python approach to algorithm analysis and design. Written by Magnus Lie Hetland, author of Beginning Python, this book is sharply focused on classical algorithms, but it......一起来看看 《Python Algorithms》 这本书的介绍吧!