小编Dav*_*son的帖子

使用 OCaml 编组数据通信客户端 - 服务器

我想用 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)

ocaml marshalling js-of-ocaml

5
推荐指数
1
解决办法
401
查看次数

标签 统计

js-of-ocaml ×1

marshalling ×1

ocaml ×1