写点什么

使用 Freya 构建 F# Web 服务器

  • 2017-05-18
  • 本文字数:992 字

    阅读完需:约 3 分钟

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 编写。

查看英文原文: Building an F# Web Server with Freya

2017-05-18 19:001738
用户头像

发布了 227 篇内容, 共 85.6 次阅读, 收获喜欢 28 次。

关注

评论

发布
暂无评论
发现更多内容

面试官:谈谈你对线程池拒绝策略的理解?

王磊

从开源大模型工具Ollama存在安全隐患思考企业级大模型应用如何严守安全红线

星环科技

数据安全 #大模型

润开鸿重磅首发基于“RISC-V+OpenHarmony+星闪”的“鸿锐”AI开发平台

坚果

润开鸿

APP与USB通讯的异常处理

北京木奇移动技术有限公司

APP开发 软件外包公司 USB开发

Deepseek 与火语言 RPA:开启智能高效新时代

火语言RPA

副业新选择:靠火语言写流程,实现睡后收入增长

火语言RPA

上班族的逆袭:我用火语言搞副业

火语言RPA

智能制造:关于中小企业数字化转型

积木链小链

数字化转型 智能制造 中小企业

震撼发布!CodeArts 解锁全新技能,鸿蒙应用与元服务开发轻松拿捏

华为云开发者联盟

harmoyos

重磅官宣!荣耀远航计划 | 2025年激励政策持续升级,报名进行中

荣耀开发者服务平台

折叠屏 AI智能体 应用市场 荣耀HONOR 荣耀远航计划

Java的SPI机制详解

京东科技开发者

论文分享:GLM: General Language Model Pretraining

京东科技开发者

CST软件优化超表面--- 偏振片- 线圆极化转换,天线阵任务,远场算轴比AR

思茂信息

cst cst使用教程 CST软件

重生之我用火语言 RPA 生成 EXE

火语言RPA

利用碎片时间,我用火语言搞副业轻松躺赚

火语言RPA

掌握火语言写流程技巧,轻松变身接单赚钱达人

火语言RPA

Echarts与Vue3中获取DOM节点可能出现的异常错误

秃头小帅oi

荣耀远航计划丨【AI服务生态】激励解读

荣耀开发者服务平台

AI Agent AI 智能体 荣耀HONOR 荣耀远航计划

APP的USB通讯开发

北京木奇移动技术有限公司

APP开发 软件外包公司 蓝牙开发

荣耀远航计划丨【折叠视界】激励解读

荣耀开发者服务平台

安卓 适配 折叠屏 荣耀HONOR 荣耀远航计划

荣耀远航计划丨【联运新游首发】激励解读

荣耀开发者服务平台

游戏 联营联运 荣耀HONOR 荣耀远航计划 新游首发

从 0 到 1,靠火语言写流程开启赚钱新路径

火语言RPA

开发HarmonyOS NEXT版五子棋游戏实战

威哥爱编程

游戏 HarmonyOS ArkTS HarmonyOS NEXT

25年浙江等保测评机构名单汇总

行云管家

网络安全 等保 等保测评

如何一眼定位SQL的代码来源:一款SQL染色标记的简易MyBatis插件

京东科技开发者

小白也能上手!我用火语言接单的实战经验

火语言RPA

使用Freya构建F# Web服务器_.NET_Pierre-Luc Maheu_InfoQ精选文章