Skip to content
/ chirp Public
forked from sosterwalder/chirp

Message-passing and actor-based programming for everyone

License

Notifications You must be signed in to change notification settings

keachi/chirp

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chirp

Message-passing and actor-based programming for everyone

It is part of Concreteclouds and the C99 implementation of pychirp.

travis [1] rtd coverage [2]

Read the Docs

[1]Python/hypothesis based test-suite in external project seecc.
[2]Coverage enforced by tests (on travis, after 1.0 release)

WORK IN PROGRESS

'Throughput Graph'

Features

  • Fully automatic connection setup
  • TLS support
    • Connections to 127.0.0.1 and ::1 aren't encrypted
    • We support and test with OpenSSL, but we prefer LibreSSL
  • Flow control
    • Chirp won't overload peers out-of-the box, if you work with long requests >2.5s adjust the timeout
    • Peer-load is reported so you can implement load-balancing easily
  • Easy message routing
  • Robust
    • No message can be lost without an error (or it is a bug)
    • Due to retry it takes a very bad network for messages to be lost
  • Very thin API
  • Minimal code-base, all additional features will be implemented as modules in an upper layer
  • Fast
    • Up to 50'000 msg/s on a single-connection (encrypted 35'000 msg/s)
    • Up to 100'000 msg/s in star-topology (encrypted same)
      • Which shows that chirp is highly optimized, but still if the network delay is bigger star-topology is the way to go.

Install

Unix

Build dependencies:

  • python3 [3]
  • make
  • gcc or clang

Documentation build dependencies:

  • sphinx
  • graphviz

Dependencies:

  • libuv
  • openssl

Install to prefix /usr/local. (with docs)

cd build
../configure --doc
make
make check
sudo make install

Install to prefix /usr. (without docs)

cd build
../configure --prefix /usr
make
make check
sudo make install

In-source build is also possible.

./configure
make
make check
sudo make install
[3]Script-headers can be patched to work with python2. It also possible to generate the makefile on a different system (for example in a embedded scenario)

Windows

  • Install Visual Studio 2015 if you want to build for python 3
    • Select Git for Windows in Visual Studio Installer or install it
  • Install Visual Studio 2008 Express
  • Install Windows SDK for Windows Server 2008 and .NET Framework 3.5 (python 2)

Note

To support python 2.7 == Visual Studio 2008, we use c99conv to convert to c89 and we support python 3.5+ == Visual Studio 2015 without c99conv. Any future version of python that uses a newer version of Visual Studio has to added to the build-system explicitly.

python configure
make.cmd

Development

Test dependencies:

  • cppcheck
  • abi-compliance-checker

Unix

cd build
../configure --dev
make test

In development mode the make file has a help:

make

Please memcheck your code, we haven't automated memcheck, yet:

valgrind --tool=memcheck ./src/[relevant]_etest

Chirp has a mode to debug macros:

../configure --dev
make clean all MACRO_DEBUG=True
gdb src/structures_etest

This requires clang-format to be installed.

Docker

If a tool is not available on your platform or you have a old version of cppcheck (cppcheck is known to behave very different across versions), you can use the docker based tests.

./ci/alpine.sh

Travis will also run this script, so you can also use it to reproduce errors on travis.

You can also run a shell.

./ci/alpine.sh shell
./ci/arch.sh shell

Windows

No development build available.

Check vs test

make check
Not instrumented (release mode), goal: checking compatibility
make test
Instrumented (dev mode), goal: helping developers to find bugs

Syntastic

By default vim will treat *.h files as cpp, but syntastic has no make-checker for cpp, so *.h would not get checked.

let g:syntastic_c_checkers = ['make']
au BufNewFile,BufRead *.h set ft=c

With this setting syntastic will check the following:

  • Clang-based build errors
  • Line length
  • Trailing whitespaces

Clang complete

If you use clang complete, we recommend

let g:clang_auto_select     = 1
let g:clang_snippets        = 1
let g:clang_snippets_engine = 'clang_complete'

License

LGPL 3.0

Contribution

  1. Ask first
  2. You must sign-over the changes to the Concrete Clouds Project
  3. So you usually just want to open change-requests

About

Message-passing and actor-based programming for everyone

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 86.4%
  • Objective-C 8.0%
  • Makefile 2.2%
  • Python 1.4%
  • C++ 1.1%
  • Shell 0.9%