我想用 OCaml 中的服务器做一个客户端 js_of_ocaml 应用程序,约束如下所述,我想知道下面的方法是否正确,或者是否有更有效的方法。服务器有时会发送大量数据(> 30MB)。
为了使客户端和服务器之间的通信更安全、更高效,我在 .mli 文件中共享一个类型 t,如下所示:
type client_to_server =
| Say_Hello
| Do_something_with of int
type server_to_client =
| Ack
| Print of string * int
Run Code Online (Sandbox Code Playgroud)
然后,将此类型编组为字符串并在网络上发送。我知道在客户端,缺少某些类型(Int64.t)。
另外,在客户端发送的 XMLHTTPRequest 中,我们希望从服务器接收多个编组对象,有时采用流式模式(即:处理loading在请求状态期间收到的编组对象(如果可能),而不是仅在done状态期间)。
这些约束迫使我们responseText将 XMLHTTPRequest的字段与 content-type 一起使用application/octet-stream。
此外,当我们从 返回响应时responseText,会进行编码转换,因为 JavaScript 的字符串是 UTF-16。但是编组的对象是二进制数据,为了检索我们的二进制数据,我们做了必要的事情(通过覆盖字符集x-user-defined并在responseText字符串的每个字符上应用掩码)。
服务器(OCaml 中的 HTTP 服务器)正在做一些简单的事情:
let process_request req =
let res = process_response req in
let s = Marshal.to_string res [] in
send s …Run Code Online (Sandbox Code Playgroud)