AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

使用 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:001540
用户头像

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

关注

评论

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

既要、又要!NJet支持不落盘的Web服务访问记录分析报表了!

通明湖

重塑跨境电商版图:1688代采集运系统的魔力之旅

代码忍者

代购系统 1688代采系统

谷歌正式开放Imagen 3访问权限!OpenAI的GPT-4o连续两周迎来两次更新!|AI日报

可信AI进展

人工智能

和鲸科技受邀出席辽宁省计算机基础教育学会 2024 年学术年会

ModelWhale

【ACL2024】基于长尾检索知识增强的大语言模型

阿里云大数据AI技术

人工智能 自然语言处理 阿里云 acl 学术论文

低代码与AI:赋能企业数字化转型

天津汇柏科技有限公司

低代码 数字化转型 人工智能’

全球首发!昆仑万维重磅推出AI短剧平台SkyReels

新消费日报

智能配补调:破局“流量红利”后时代的零售新策略

第七在线

AE关键帧缓入缓出曲线调节脚本 AEscripts flow mac版 支持M1/M2

Rose

AE关键帧

权限管理散、乱、慢?很好解决

芯盾时代

iam 统一身份认证 权限管理系统

IBM,谁说大象不能跳舞?

IPD产品研发管理

华为 产品设计 产品开发 ibm 集成产品开发体系

黄金三年,京东后端新人的技术破茧之路

京东零售技术

后端 技术成长 企业号2024年8月PK榜

专业音调校正和操控 Nuro Audio Xpitch for mac v1.0.2激活版

Rose

玩转京东商品评论数据接口:数据挖掘与洞察

tbapi

京东商品评论内容接口 京东API 京东商品评论数据接口

CSS炫酷光晕按钮特效

南城FE

CSS 前端 动画 按钮

高纯度云原生 AI!Volcano在KubeCon China 2024的技术分享

华为云原生团队

云计算 容器 云原生

“AI+Security”系列第2期(四):AI/机器学习供应链攻击

云起无垠

OpenSPG 首个 Release 版本发布,提供成熟可靠的知识构建解决方案

可信AI进展

人工智能

编程神器:IDA Professional 逆向工程和静态分析工具

Rose

编程开发 IDA Professional IDA Professional9破解版 反汇编逆向神器

中文汉化版 眼睛糖果滤镜PS插件 Alien Skin Eye Candy 7下载安装

Rose

ps滤镜下载 Alien Skin Eye Candy 7 眼睛糖果滤镜

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