Eliom - это структура для создания клиентских/серверных веб -приложений и мобильных приложений в OCAML.
Его можно использовать как в качестве традиционной веб-структуры на стороне сервера, так и для реализации сложных клиентских приложений.
ELIOM превращает OCAML в многоуровневый язык, что позволяет реализовать как сервер, так и клиентские части веб-приложения и мобильного приложения в качестве одной программы.
Это много упрощает связь между сервером и клиентом. Приложения могут работать на любом веб -браузере или мобильном устройстве (iOS, Android), сохраняя от необходимости разработки одной версии для каждой платформы.
Eliom имеет поддержку реактивных страниц (сгенерированных на сервере или клиенте), расширенного механизма сеанса, сервера к клиентскому общению, веб -программирования на основе продолжения и т. Д.
Eliom является частью проекта Ocsigen.
opam install eliom
Определение службы на пути /foo , принимая параметры GET:
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 (глобальное значение для всего сервера). Ссылки ELIOM сохраняются, если вы добавляете дополнительный параметр ~persistent для функционирования Eliom_reference.eref . Больше документации здесь.
Напишите свое первое веб -и мобильное приложение с Eliom, используя ocsigen start