eliom
11.1.1
Eliom是在OCAML中构建客户端/服务器网和移动应用程序的框架。
它既可以用作传统的服务器端网络框架,也可以用作复杂的客户端服务器应用程序。
Eliom将OCAML转换为多层语言,使其成为一个单个程序的服务器和客户端的服务器和客户端部分。
这简化了服务器和客户端之间的很多通信。应用程序可以在任何Web浏览器或移动设备(iOS,Android)上运行,从而从为每个平台开发一个版本的需求中节省。
Eliom支持反应性页面(在服务器或客户端生成),高级会话机制,服务器到客户端通信,基于持续的Web编程等。
Eliom是Ocsigen项目的一部分。
opam install eliom
在路径/foo上定义服务,采用任何获取参数:
let myservice =
Eliom_service. create
~path: ( Eliom_service. Path [ " foo " ])
~meth: ( Eliom_service. Get ( Eliom_parameter. any))
()
let () =
Eliom_registration.Html. register ~service: myservice
( fun get_params () ->
Lwt. return
Eliom_content.Html.F. (html (head (title (txt " " )))
(body [h1 [txt " Hello " ]])))用参数插入指向该服务的链接:
Eliom_content.Html.D. a ~service: myservice [txt " Home " ] [( " param1 " , " v1 " ); ( " param2 " , " v2 " )]活动处理程序用OCAML编写:
div ~a: [a_onclick [ % client ( fun ev -> ... )]] [ ... ]客户端和服务器侧是一个单个程序:
let % server a = ... (* code for the server part of the application *)
let % client b = ... (* code for the client part of the application *)
let % shared c = ... (* code that will be included in both parts *)在客户端代码中使用服务器端值:
let % server a = ...
let % client f () =
print_endline ~% a ; (* print in browser console *)
...从客户端程序调用服务器函数:
let % rpc f (x : int ) : string Lwt. t = ... (* server-side code *)
let % client () =
let % lwt r = f 4 in
...使用ELIOM参考文献在服务器上保存会话数据:
let % server r = Eliom_reference. eref ~scope: Eliom_common. default_session_scope 0
let % server f () =
let % lwt v = Eliom_reference. get r in
Eliom_reference. set r (v + 1 );
...
范围可以在哪里:
Eliom_common.default_session_scope (每个浏览器的不同值),Eliom_common.default_process_scope (每个选项卡的不同值),Eliom_common.default_group_scope (每个用户的不同值),Eliom_common.site_scope (整个站点的值),Eliom_common.global_scope (整个服务器的全局值)。如果您将可选参数~persistent添加到函数Eliom_reference.eref ,则ELIOM参考是持久的。 这里更多文档。
使用Ocsigen开始,用Eliom编写第一个网络和移动应用程序