通过websockets实现GHCJS代码的最有效的线格式

Joa*_*ner 8 serialization haskell websocket ghcjs

我正在研究一个Haskell应用程序,它运行在用GHCJS编译的浏览器中,GHCJS通过websockets与服务器(也用Haskell编写)进行通信.两个程序共享相同的Haskell数据类型定义,我"只是"必须选择序列化格式.

目前,为了简单起见,该程序运行在ReadShow,其工作,但显然不够理想.

另一方面,目前尚不清楚快速序列化的常用竞争者(如cereal库)ByteStrings是否真正在GHCJS中有效.此外,GHCJS的API似乎使得很难ByteStringsBlobJavaScript绑定到Websockets提供的二进制类型进行交互.

通用代码生成(使用GHC.Generics)会很好.

有人解决过这个问题吗?可能甚至对GHCJS的各种序列化变体进行了基准测试?

Hap*_*pal 1

去年,我们在 Haskell 中寻找一个快速序列化器/反序列化器库来将数据存储在 reddis 缓存中,最终我们最终使用了 ProtoBuf!部分原因是我们已经实现了要序列化的所有对象的 ProtoBuf 实现,但与谷物/二进制相比,性能也好得多。到时候,还不存在。

序列化/反序列化的大小和速度也很大程度上取决于您的数据。例如,如果你有很多小的(比如在 1 到 100 范围内)64 位数字,protobuf(因为它的基本 128 变体编码)甚至 JSON 可能比谷物或二进制(我猜使用固定的数字的大小,无论其值如何)。

还有Typed-Wire允许您跨几种语言进行序列化,但我认为它使用 JSON 作为底层实现。

我没有使用 GHCJS 的经验,但我建议store先尝试一下。只需确保客户端和服务器没有小/大字节序不兼容。