unclechu's fork of gRPC-haskell
Find a file
Joel Stanley 096d399b30 MONAPP-1035: Fix errant hang on metadata exchange in Haskell client-side bidirectional streaming (#70)
* (wip) Change ClientRWHandler to use an IO action for metadata acqui

* Demonstrate placement of WaitForInitialMetadata() in hellos_client

* Make hellos cpp server always send metadata first, for now

* Show getMD placement in haskell hellos-client

* Add prelim bidi metadata exchange behavior tweaks to line up with C++ API conventions
2016-08-15 12:55:40 -05:00
bench remove duplicated threadDelaySecs function (#56) 2016-07-29 13:18:08 -07:00
cbits Update to gRPC 0.15 (#61) 2016-08-05 09:29:20 -07:00
examples MONAPP-1035: Fix errant hang on metadata exchange in Haskell client-side bidirectional streaming (#70) 2016-08-15 12:55:40 -05:00
include Update to gRPC 0.15 (#61) 2016-08-05 09:29:20 -07:00
src/Network/GRPC MONAPP-1035: Fix errant hang on metadata exchange in Haskell client-side bidirectional streaming (#70) 2016-08-15 12:55:40 -05:00
tests MONAPP-1035: Fix errant hang on metadata exchange in Haskell client-side bidirectional streaming (#70) 2016-08-15 12:55:40 -05:00
.gitignore Criterion benchmarks (#50) 2016-07-26 15:48:25 -07:00
default-tests.nix Update to gRPC 0.15 (#61) 2016-08-05 09:29:20 -07:00
default.nix Update to gRPC 0.15 (#61) 2016-08-05 09:29:20 -07:00
grpc-haskell.cabal Connor/metadata improvements (#52) 2016-08-01 12:38:35 -07:00
LICENSE Initial commit. 2015-02-27 18:14:32 +01:00
README.md 0.15.* 2016-08-09 11:03:19 -07:00
release.nix Update to gRPC 0.15 (#61) 2016-08-05 09:29:20 -07:00
Setup.hs Initial commit. 2015-02-27 18:14:32 +01:00
stack.yaml Connor/metadata improvements (#52) 2016-08-01 12:38:35 -07:00

Running the tests

In order to run the tests, you will need to have the grpcio, gevent, and grpcio-tools python packages installed. You can install them using pip. It is recommended that you use a python virtualenv to do this.

$ virtualenv path/to/virtualenv # to create a virtualenv
$ . path/to/virtualenv/bin/activate # to use an existing virtualenv
$ pip install grpcio-tools gevent
$ pip install grpcio # Need to install grpcio-tools first to avoid a versioning problem

Building GRPC

In order to compile this project, and anything which depends on it, you will need a working installation of the GRPC C core libraries. This library currently uses the 0.15 version range, so checkout an appropriate revision of the repository, and install as follows:

git clone https://github.com/grpc/grpc.git
git checkout release-0_15_1
cd grpc
git submodule update --init
make
sudo make install

Alternatively, using Nix, pass the following expression to nix-build and point Stack to the build products in the Nix store:

let pkgs = import <nixpkgs> {};
in  pkgs.stdenv.mkDerivation rec
    {   name = "grpc";
        src = pkgs.fetchgit
        { url    = "https://github.com/grpc/grpc.git";
          rev    = "674b30373e2d6a1e26425952805179f8d52a8c00";
          sha256 = "05vj48w4h7bn6xyf1wyg2l6psl38h4yz6j1cl0yd2p5h7f5hb3s7";
        };
        preInstall = "export prefix";
        buildInputs =
        [   pkgs.darwin.cctools
            pkgs.autoconf
            pkgs.automake
            pkgs.libtool
            pkgs.which
            pkgs.zlib

            pkgs.openssl
        ];
    }

Using the Library

You must compile with -threaded, because we rely on being able to execute Haskell while blocking on foreign calls to the gRPC library. If not using code generation, the recommended place to start is in the Network.GRPC.HighLevel.Server.Unregistered module, where serverLoop provides a handler loop.