写点什么

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

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

关注

评论

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

一文盘点PoseiSwap近期的生态利好

西柚子

Ribbon默认负载均衡规则替换为NacosRule

越长大越悲伤

Spring Cloud

使用 OpenAPI 构建 API 文档

江湖十年

golang Web 后端 swagger OpenAPI

Midjourney|文心一格 Prompt:完整参数列表、风格汇总、文生图词典合集

汀丶人工智能

人工智能 AI绘画 MidJourney 文生图 prompt learning

使用Go语言实现工厂模式的三种方式

Jack

UserDAO(UWT)会是WEB3.0中新的宠儿吗?

币离海

Web3.0 UserDAO UWT

Midjourney|文心一格prompt教程[进阶篇]:Midjourney Prompt 高级参数、各版本差异、官方提供常见问题

汀丶人工智能

人工智能 AI绘画 MidJourney 文生图 prompt learning

Cornerstone如何连接到 HTTP和SVN服务器?

理理

svn HTTP cornerstone 4破解 Cornerstone使用教程 Cornerstone永久激活版

轻松建模、编辑、分析尽在Rhino 7中文激活版~

真大的脸盆

Mac 3D Mac 软件 建模软件 3d建模

9款好用的项目工时软件推荐

爱吃小舅的鱼

项目管理 工时管理

建造者模式:将对象的构建与表示分离,提高程序的可维护性和可扩展性

Jack

golang 设计模式

C语言编程—存储知识

芯动大师

国内AI大模型 VS chatgpt (20)-- H265/H264有何不同,h265有什么优势?

福大大架构师每日一题

福大大 ChatGPT 文心一言

如何在Mac上运行Windows游戏?CrossOver是您不错选择!

理理

Mac虚拟机 如何在Mac上运行win游戏 crossover mac 破解版

由斯坦福、Nautilus Chain等联合主办的 Hackathon 活动,现已接受报名

鳄鱼视界

mac端好用的建模软件分享~

真大的脸盆

Mac Mac 软件 建模工具 三维建模软件

一文盘点PoseiSwap近期的生态利好

股市老人

深度学习基础入门篇[8]::计算机视觉与卷积神经网络、卷积模型CNN综述、池化讲解、CNN参数计算

汀丶人工智能

人工智能 深度学习 计算机视觉 池化 CNN网络

如何通过Makefile优化加速编译过程提高开发效率

小万哥

c++ 程序员 面试 后端 开发

fcpx标记功能如何使用?fcpx标记快捷键有哪些?

理理

Final Cut Pro破解版 Final Cut Pro教程 fcpx标记功能 Mac视频剪辑软件

一文读懂大语言模型

俞凡

人工智能

开源字节 CRM 系统

源字节1号

开源 软件开发 小程序开发

Django笔记三十四之分页操作

Hunter熊

Python django 分页

From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了

Seachal

Java android Lambda kotlin 函数式编程

lut调色预设怎么安装,LUT预设导入FCPX/PR/AE/PS/LR/达芬奇等软件教程

理理

lut调色预设 luts预设导入教程 lut调色预设怎么安装

我出版了一本关于TikTok电商运营的书

博文视点Broadview

2023-05-21:给定一个字符串 s 和一个整数 k 。你可以从 s 的前 k 个字母中选择一个, 并把它加到字符串的末尾。 返回 在应用上述步骤的任意数量的移动后,字典上最小的字符串。 输入:s

福大大架构师每日一题

Go 算法 福大大

面试复盘:哈希冲突的常见解决方案?

javacn.site

如何修复“无法打开应用,因为Apple无法检查其是否包含恶意软件“

理理

Mac应用程序无法打开 mac教程 苹果软件下载

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