From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 2EE887EE9C for ; Thu, 24 Nov 2016 18:19:58 +0100 (CET) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=p.donadeo@gmail.com; spf=Pass smtp.mailfrom=p.donadeo@gmail.com; spf=None smtp.helo=postmaster@mail-oi0-f42.google.com Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of p.donadeo@gmail.com) identity=pra; client-ip=209.85.218.42; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="p.donadeo@gmail.com"; x-sender="p.donadeo@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of p.donadeo@gmail.com designates 209.85.218.42 as permitted sender) identity=mailfrom; client-ip=209.85.218.42; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="p.donadeo@gmail.com"; x-sender="p.donadeo@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-oi0-f42.google.com) identity=helo; client-ip=209.85.218.42; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="p.donadeo@gmail.com"; x-sender="postmaster@mail-oi0-f42.google.com"; x-conformance=sidf_compatible IronPort-PHdr: =?us-ascii?q?9a23=3Aiz/NChSWuTSt3YwNYk4/XOcDjNpsv+yvbD5Q0YIu?= =?us-ascii?q?jvd0So/mwa64ZBON2/xhgRfzUJnB7Loc0qyN4vumAz1LsMrJ8ChbNscTB1ld0Y?= =?us-ascii?q?RetjdjKfDGIHWzFOTtYS0+EZYKf35e1Fb/D3JoHt3jbUbZuHy44G1aMBz+MQ1o?= =?us-ascii?q?Ora9QdaK3Iyfntq/8JzLYghOmCH1IfYrdE33/k3tsZwxqoJnLu4VywDV6i9Dcu?= =?us-ascii?q?FSgGdpPk67nhDm58728oQ1oApKvPd0z8dHVaKyU6M+RLBVC3xyKyY548viuRTE?= =?us-ascii?q?ZQSK73oYFG4Rl0wbUED+8BjmU8Kp4WPBve1n1XzfZJWuQA=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0AxAgDnHzdYfyraVdFeHQEFAQsBGAEFA?= =?us-ascii?q?QsBgw0BAQEBAT2BPAetNYZ0hyeIEgdDEAEBAQEBAQEBAQEBEgEBCQsLCRsygjM?= =?us-ascii?q?EARUBBIIvEQQZARseAxIDDTcCJAERAQUBIjWIMAEDF5ARjUmCCYEyPzKLUIFsG?= =?us-ascii?q?AUBH4MNBYNhChknDVSDXwIGEoYsiQ6DGoJdBZpUgUmPPZAykDkTHoETNYEVUYM?= =?us-ascii?q?Xggk9NIZ4gU8BAQE?= X-IPAS-Result: =?us-ascii?q?A0AxAgDnHzdYfyraVdFeHQEFAQsBGAEFAQsBgw0BAQEBAT2?= =?us-ascii?q?BPAetNYZ0hyeIEgdDEAEBAQEBAQEBAQEBEgEBCQsLCRsygjMEARUBBIIvEQQZA?= =?us-ascii?q?RseAxIDDTcCJAERAQUBIjWIMAEDF5ARjUmCCYEyPzKLUIFsGAUBH4MNBYNhChk?= =?us-ascii?q?nDVSDXwIGEoYsiQ6DGoJdBZpUgUmPPZAykDkTHoETNYEVUYMXggk9NIZ4gU8BA?= =?us-ascii?q?QE?= X-IronPort-AV: E=Sophos;i="5.31,543,1473112800"; d="scan'208,217";a="246561773" Received: from mail-oi0-f42.google.com ([209.85.218.42]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/AES128-GCM-SHA256; 24 Nov 2016 18:19:57 +0100 Received: by mail-oi0-f42.google.com with SMTP id y198so57354797oia.1 for ; Thu, 24 Nov 2016 09:19:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to; bh=J79xCFTQt9Cbd0fAl/kIqhVC7zx8LOSh6tqJ/nyeatI=; b=q7WD6g8N07Hl7KUU2YySN6Kfqvdh9sK7OthO/5HybGUkPLFlWvemJe/QRw+lTLcReb WSyUG8UA+E0CDhT/NjFbETrT/c/++IgnFA+vF6ckgtvp8WUc3Yu5w5xigSMNfvlSjnSW pbzlOYPYcprA6y4Ho+bfK7LeGxBhpNn5udPxbD+5LWO/dUU4jdywKUznb1k6894JLbaj nkhe2Kk6Vg2dTmXVjRsoEjulHxIPyRkTFp3VAWmeNnWbmq0uuMJOI/kHzF1jL9aznwLL Gmr5Qc9rGhH0p2zCNX9tftG1/j13iIC8GV7Ydc5ZXRinNn0eYtxVoy1jdlETEaQUqJm8 CgXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=J79xCFTQt9Cbd0fAl/kIqhVC7zx8LOSh6tqJ/nyeatI=; b=dqRcnP4t/KQ/vDl02ktoY1sXqWorMRn9FK2wXS9k3gCZSBrcTNrFqYLyOohhttf5Lq q8TBwQAscIz3jJ6x6lF5S8gBGNUnegWzntfKv32fTcXOrR3+kMJ3NCcgI7B+bS5Lx2SR paLl1zfny/ZDArgv6J2rbc1K2IbZhug5JMYSH4KkCEjzTyGAY/iVC5Jo7vtHyHfNSDT1 BZthn0IUhCUcmVxDTLtIHDnAUfucAGDjQprj14whkq4vEYftxEfLu/3ey/7Tt0uDgS3t PcFDWwansl7lkmVi9RDFLfKLe59Caxq11/VXKFq2rkxEzAAS8oXMUihEFqodbEGapVrg DdUw== X-Gm-Message-State: AKaTC00neVmjOrnaRm8vc3To/y+l3rB3hsZMF1LpfvvhWm/866NQZQFdsQ2eUNGZkoLKZ4fA3RUUcIDU9BKcLg== X-Received: by 10.157.10.40 with SMTP id 37mr2068899otg.190.1480007995738; Thu, 24 Nov 2016 09:19:55 -0800 (PST) MIME-Version: 1.0 Received: by 10.182.50.167 with HTTP; Thu, 24 Nov 2016 09:19:15 -0800 (PST) From: Paolo Donadeo Date: Thu, 24 Nov 2016 18:19:15 +0100 Message-ID: To: OCaml List Content-Type: multipart/alternative; boundary=001a11354680d9d1ce05420f3605 Subject: [Caml-list] Compressing stream in Async.Tcp.Server --001a11354680d9d1ce05420f3605 Content-Type: text/plain; charset=UTF-8 Hi all, I'm writing a simple client/server application using Async.Rpc. The skeletons of the client and server is essentially derived from the examples available on line. Since the messages are highly compressible, I would like to use ZLib (e.g. Cryptokit) but I can't figure out how. Any ideas? CLIENT: * Tcp.with_connection* * (Tcp.to_host_and_port host port)* * ~timeout:(sec 1.)* * (fun _ r w ->* * (* COMPRESSION HERE, HOW? *)* * Rpc.Connection.create r w ~connection_state:Pervasives.ignore* * >>= function* * | Error exn -> raise exn* * | Ok conn -> begin* * let msg = {* * Rpc_protocol.scada_uuid = conf.Config_manager.scada_uuid;* * measures;* * } in* * Rpc.Rpc.dispatch Rpc_protocol.export_data_rpc conn msg >>= function* * | Ok response -> return response* * | Error e -> begin* * error ~tags "SERVER SIDE EXCEPTION";* * error ~tags " %s" (Error.to_string_hum e);* * return false* * end* * end* * )* SERVER: * Tcp.Server.create* * ~on_handler_error:(`Call (fun _ exn -> Log.Global.sexp (Exn.sexp_of_t exn)))* * (Tcp.on_port port)* * (fun _addr r w ->* * (* COMPRESSION HERE, HOW? *)* * Rpc.Connection.server_with_close r w* * ~connection_state:(fun c ->* * {* * db_thread = db_thread;* * }* * )* * ~on_handshake_error:(* * `Call (fun exn -> Log.Global.sexp (Exn.sexp_of_t exn); return ()))* * ~implementations)* -- *Paolo* --001a11354680d9d1ce05420f3605 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi all, I'm writing a simple client/server a= pplication using Async.Rpc. The skeletons of the client and server is essen= tially derived from the examples available on line.

Since the messages are highly compressible, I would like to use ZLib= (e.g. Cryptokit) but I can't figure out how.

= Any ideas?

CLIENT:
<= font face=3D"monospace, monospace">=C2=A0 =C2=A0 Tcp.with_connection=
=C2=A0 =C2=A0 =C2=A0 = (Tcp.to_host_and_port host port)
=C2=A0 =C2=A0 =C2=A0 ~timeout:(sec 1.)
=C2=A0 =C2=A0 =C2=A0 (fun _ r w -= >
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 (*= COMPRESSION HERE, HOW? *)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 Rpc.Connection.create= r w ~connection_state:Pervasives.ignore
=C2=A0 =C2=A0 =C2=A0 =C2=A0 >>=3D func= tion
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 | Error exn -> raise exn
=C2=A0 =C2=A0 =C2=A0 =C2=A0 | Ok conn =C2=A0= -> begin
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 let msg =3D {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 Rpc_protocol.scada_uuid =3D conf.Config_manager.scada_u= uid;
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 measures;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= } in
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Rpc.Rpc.dispatch Rpc_protocol.export_dat= a_rpc conn msg >>=3D function
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | Ok respons= e -> return response
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | Error e -> begin
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 error ~tags "SERVER SIDE EXCEPT= ION";
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 error ~tags " =C2= =A0 =C2=A0%s" (Error.to_string_hum e);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 return false
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 end
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 end
=C2= =A0 =C2=A0 =C2=A0 )


SERVER:
=C2=A0 Tcp.= Server.create
= =C2=A0 =C2=A0 ~on_handler_error:(`Call (fun _ exn -> Log.Global.sexp (Ex= n.sexp_of_t exn)))
=C2=A0 =C2=A0 (Tcp.on_port port)
=C2=A0 =C2=A0 (fun _addr r w ->
=C2=A0 =C2=A0 =C2=A0 (* COMPRESSION HERE, HOW? *)
=C2=A0 = =C2=A0 =C2=A0 Rpc.Connection.server_with_close r w
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ~conne= ction_state:(fun c ->
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 d= b_thread =3D db_thread;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
=C2=A0 =C2=A0 =C2=A0 =C2=A0 )
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ~= on_handshake_error:(
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 `Call (fun exn -> Log.Global.se= xp (Exn.sexp_of_t exn); return ()))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ~implementations)


--
Paolo
--001a11354680d9d1ce05420f3605--