Wangle is a framework providing a set of common client/server abstractions for building services in a consistent, modular, and composable way.

Overview

Travis Build Status CI Status

Wangle

C++ networking library

Wangle is a library that makes it easy to build protocols, application clients, and application servers.

It's like Netty + Finagle smooshed together, but in C++

Building and Installing

The main dependencies are:

Once folly is installed, run the following inside the wangle directory to build, test, and install wangle:

cmake .
make
ctest
sudo make install

Tutorial

There is a tutorial here that explains the basics of Wangle and shows how to build an echo server/client.

Examples

See the examples/ directory for some example Wangle servers and clients

License

Wangle is Apache 2.0-licensed.

Contributing

See the CONTRIBUTING file for how to help out.

Documentation

Wangle interfaces are asynchronous. Interfaces are currently based on Futures, but we're also exploring how to support fibers

Client / Server abstraction #

You're probably familiar with Java's Netty, or Python's twisted, or similar libraries.

It is built on top of folly/async/io, so it's one level up the stack from that (or similar abstractions like boost::asio)

ServerBootstrap - easily manage creation of threadpools and pipelines

ClientBootstrap - the same for clients

Pipeline - set up a series of handlers that modify your socket data

Request / Response abstraction #

This is roughly equivalent to the Finagle library.

Aims to provide easy testing, load balancing, client pooling, retry logic, etc. for any request/response type service - i.e. thrift, http, etc.

Service - a matched interface between client/server. A server will implement this interface, and a client will call in to it. These are protocol-specific

ServiceFilter - a generic filter on a service. Examples: stats, request timeouts, rate limiting

ServiceFactory - A factory that creates client connections. Any protocol specific setup code goes here

ServiceFactoryFilter - Generic filters that control how connections are created. Client examples: load balancing, pooling, idle timeouts, markdowns, etc.

ServerBootstrap

Easily create a new server

ServerBootstrap does the work to set up one or multiple acceptor threads, and one or multiple sets of IO threads. The thread pools can be the same. SO_REUSEPORT is automatically supported for multiple accept threads. tcp is most common, although udp is also supported.

Methods #

childPipeline(PipelineFactory<Pipeline>)

Sets the pipeline factory for each new connection. One pipeline per connection will be created.

group(IOThreadPoolExecutor accept, IOThreadPoolExecutor io)

Sets the thread pools for accept and io thread pools. If more than one thread is in the accept group, SO_REUSEPORT is used. Defaults to a single accept thread, and one io thread per core.

bind(SocketAddress),bind(port)

Binds to a port. Automatically starts to accept after bind.

stop()

Stops listening on all sockets.

join()

Joins all threadpools - all current reads and writes will be completed before this method returns.

NOTE: however that both accept and io thread pools will be stopped using this method, so the thread pools can't be shared, or care must be taken using shared pools during shutdown.

waitForStop()

Waits for stop() to be called from another thread.

Other methods #

channelFactory(ServerSocketFactory)

Sets up the type of server. Defaults to TCP AsyncServerSocket, but AsyncUDPServerSocket is also supported to receive udp messages. In practice, ServerBootstrap is only useful for udp if you need to multiplex the messages across many threads, or have TCP connections going on at the same time, etc. Simple usages of AsyncUDPSocket probably don't need the complexity of ServerBootstrap.

pipeline(PipelineFactory<AcceptPipeline>)

This pipeline method is used to get the accepted socket (or udp message) *before* it has been handed off to an IO thread. This can be used to steer the accept thread to a particular thread, or for logging.

See also AcceptRoutingHandler and RoutingDataHandler for additional help in reading data off of the accepted socket before it gets attached to an IO thread. These can be used to hash incoming sockets to specific threads.

childHandler(AcceptorFactory)

Previously facebook had lots of code that used AcceptorFactories instead of Pipelines, this is a method to support this code and be backwards compatible. The AcceptorFactory is responsible for creating acceptors, setting up pipelines, setting up AsyncSocket read callbacks, etc.

Examples #

A simple example:

ServerBootstrap<TelnetPipeline> server;                                                                                                      
server.childPipeline(std::make_shared<TelnetPipelineFactory>());                                                                             
server.bind(FLAGS_port);                                                                                                                     
server.waitForStop();

ClientBootstrap

Create clients easily

ClientBootstrap is a thin wrapper around AsyncSocket that provides a future interface to the connect callback, and a Pipeline interface to the read callback.

Methods #

group(IOThreadPoolExecutor)

Sets the thread or group of threads where the IO will take place. Callbacks are also made on this thread.

bind(port)

Optionally bind to a specific port

Future<Pipeline*> connect(SocketAddress)

Connect to the selected address. When the future is complete, the initialized pipeline will be returned.

NOTE: future.cancel() can be called to cancel an outstanding connection attempt.

pipelineFactory(PipelineFactory<Pipeline>)

Set the pipeline factory to use after a connection is successful.

Example #

ClientBootstrap<TelnetPipeline> client;
client.group(std::make_shared<folly::wangle::IOThreadPoolExecutor>(1));
client.pipelineFactory(std::make_shared<TelnetPipelineFactory>());
// synchronously wait for the connect to finish
auto pipeline = client.connect(SocketAddress(FLAGS_host,FLAGS_port)).get();

// close the pipeline when finished pipeline->close();

Pipeline

Send your socket data through a series of tubes

A Pipeline is a series of Handlers that intercept inbound or outbound events, giving full control over how events are handled. Handlers can be added dynamically to the pipeline.

When events are called, a Context* object is passed to the Handler - this means state can be stored in the context object, and a single instantiation of any individual Handler can be used for the entire program.

Netty's documentation: ChannelHandler

Usually, the bottom of the Pipeline is a wangle::AsyncSocketHandler to read/write to a socket, but this isn't a requirement.

A pipeline is templated on the input and output types:

EventBase base_;
Pipeline<IOBufQueue&, std::unique_ptr<IOBuf>> pipeline;
pipeline.addBack(AsyncSocketHandler(AsyncSocket::newSocket(eventBase)));

The above creates a pipeline and adds a single AsyncSocket handler, that will push read events through the pipeline when the socket gets bytes. Let's try handling some socket events:

class MyHandler : public InboundHandler<folly::IOBufQueue&> {
 public:

void read(Context* ctx, folly::IOBufQueue& q) override { IOBufQueue data;
if (q.chainLength() >= 4) { data.append(q.split(4)); ctx->fireRead(data); } } };

This handler only handles read (inbound) data, so we can inherit from InboundHandler, and ignore the outbound type (so the ordering of inbound/outbound handlers in your pipeline doesn't matter). It checks if there are at least 4 bytes of data available, and if so, passes them on to the next handler. If there aren't yet four bytes of data available, it does nothing, and waits for more data.

We can add this handler to our pipeline like so:

pipeline.addBack(MyHandler());

and remove it just as easily:

pipeline.remove<MyHandler>();

StaticPipeline #

Instantiating all these handlers and pipelines can hit the allocator pretty hard. There are two ways to try to do fewer allocations. StaticPipeline allows *all* the handlers, and the pipeline, to be instantiated all in the same memory block, so we only hit the allocator once.

The other option is to allocate the handlers once at startup, and reuse them in many pipelines. This means all state has to be saved in the HandlerContext object instead of the Handler itself, since each handler can be in multiple pipelines. There is one context per pipeline to get around this limitation.

Built-in handlers

The stuff that comes with the box

Byte to byte handlers #

AsyncSocketHandler #

This is almost always the first handler in the pipeline for clients and servers - it connects an AsyncSocket to the pipeline. Having it as a handler is nice, because mocking it out for tests becomes trivial.

OutputBufferingHandler #

Output is buffered and only sent once per event loop. This logic is exactly what is in ThriftServer, and very similar to what exists in proxygen - it can improve throughput for small writes by up to 300%.

EventBaseHandler #

Putting this right after an AsyncSocketHandler means that writes can happen from any thread, and eventBase->runInEventBaseThread() will automatically be called to put them in the correct thread. It doesn't intrinsically make the pipeline thread-safe though, writes from different threads may be interleaved, other handler stages must be only used from one thread or be thread safe, etc.

In addition, reads are still always called on the eventBase thread.

Codecs #

FixedLengthFrameDecoder #

A decoder that splits received IOBufs by a fixed number of bytes. Used for fixed-length protocols

LengthFieldPrepender #

Prepends a fixed-length field length. Field length is configurable.

LengthFieldBasedFrameDecoder #

The receiving portion of LengthFieldPrepender - decodes based on a fixed frame length, with optional header/tailer data sections.

LineBasedFrameDecoder #

Decodes by line (with optional ending detection types), to be used for text-based protocols

StringCodec #

Converts from IOBufs to std::strings and back for text-based protocols. Must be used after one of the above frame decoders

Services

How to add a new protocol

Finagle's documentation on Services is highly recommended

Services #

A Pipeline was read() and write() methods - it streams bytes in one or both directions. write() returns a future, but the future is set when the bytes are successfully written. Using pipeline there is no easy way to match up requests and responses for RPC.

A Service is an RPC abstraction - Both clients and servers implement the interface. Servers implement it by handling the request. Clients implement it by sending the request to the server to complete.

A Dispatcher is the adapter between the Pipeline and Service that matches up the requests and responses. There are several built in Dispatchers, however if you are doing anything advanced, you may need to write your own.

Because both clients and servers implement the same interface, mocking either clients or servers is trivially easy.

ServiceFilters #

ServiceFilters provide a way to wrap filters around every request and response. Things like logging, timeouts, retrying requests, etc. can be implemented as ServiceFilters.

Existing ServiceFilters include:

  • CloseOnReleaseFilter - rejects requests after connection is closed. Often used in conjunction with
  • ExpiringFilter - idle timeout and max connection time (usually used for clients)
  • TimeoutFilter - request timeout time. Usually used on servers. Clients can use future.within to specify timeouts individually.
  • ExecutorFilter - move requests to a different executor.

ServiceFactories #

For some services, a Factory can help instantiate clients. In Finagle, these are frequently provided for easy use with specific protocols, i.e. http, memcache, etc.

ServiceFactoryFilters #

ServiceFactoryFilters provide filters for getting clients. These include most connection-oriented things, like connection pooling, selection, dispatch, load balancing, etc.

Existing ServiceFactoryFilters:

Issues
  • Build error on OSX

    Build error on OSX

    [ 30%] Building CXX object CMakeFiles/wangle.dir/channel/FileRegion.cpp.o /Users/btv/wangle/wangle/channel/FileRegion.cpp:54:15: error: use of undeclared identifier 'SPLICE_F_NONBLOCK' int flags = SPLICE_F_NONBLOCK | SPLICE_F_MORE;

    opened by brennanvincent 10
  • Build wangle encountered error: error: use of undeclared identifier 'malloc_usable_size'

    Build wangle encountered error: error: use of undeclared identifier 'malloc_usable_size'

    When I tried to build wangle, it reported: In file included from /project/opensource/source/wangle/wangle/../wangle/concurrent/ThreadPoolExecutor.h:19: In file included from /project/opensource/source/wangle/wangle/../wangle/deprecated/rx/Observable.h:20: /usr/local/include/folly/small_vector.h:619:14: error: use of undeclared identifier 'malloc_usable_size' return malloc_usable_size(u.pdata_.heap_) / sizeof(value_type);

    I've built "folly" successfully, did anyone encounter the same issue? Thanks!

    opened by ustczxf 9
  • Fix bug of PipelineBase::removeHelper

    Fix bug of PipelineBase::removeHelper

    There is a bug when removeHelper's arguments is handler == nullptr and checkEqual== false.Because std::vecotr<>::erase will return a iterator following the last removed element, In this case the loop should't add it when the function named removeAt has executed.

    CLA Signed GH Review: review-needed Import Started 
    opened by EFLql 8
  • Fix static linking

    Fix static linking

    I was trying to compile a static-only version of this library that links with static versions of the dependencies. A few things seem to be missing from the CMake configuration to make this possible.

    The extra find_path commands allow for the (admittedly uncommon) situation where every dependency is installed in a separate location.

    CLA Signed GH Review: review-needed Import Started 
    opened by msteinert 8
  • Changes for OS X support

    Changes for OS X support

    I have made a few changes in order to get Wangle to build on OS X. There were 4 different problems which I've fixed in 4 different commits. The commit messages should be self-explanatory. The c++14 requirement might not be the best option to solve the compilation issue depending on the project's objective. Maybe the methods that relied on return type deduction should just specify their return type explicitly so as to remain c++11 compatible. I leave that to discussion.

    CLA Signed GH Review: accepted Import Started 
    opened by Dalzhim 7
  • G++ exhausted the memory while compiling Acceptor.cpp

    G++ exhausted the memory while compiling Acceptor.cpp

    My g++ version is

    % g++ --version
    g++ (GCC) 6.1.1 20160510 (Red Hat 6.1.1-2)
    Copyright (C) 2016 Free Software Foundation, Inc.
    

    I don't know if it's a bug of g++ or it's a problem caused by the structure of Acceptor.cpp.

    opened by guoxiao 6
  • Add Echo Server/Client Example

    Add Echo Server/Client Example

    I got a lot of feedback from my blog post saying there wasn't much examples to learn Wangle so I thought I'd write a few examples. I will start off with the most basic example - an Echo Server/Client.

    opened by jamperry 6
  • Compile fails on Ubuntu 14.04

    Compile fails on Ubuntu 14.04

    /usr/bin/ld: warning: libboost_thread.so.1.59.0, needed by /usr/local/lib/../lib/libfolly.so, may conflict with libboost_thread.so.1.54.0 /usr/bin/ld: warning: libboost_system.so.1.59.0, needed by /usr/local/lib/../lib/libfolly.so, may conflict with libboost_system.so.1.54.0 /usr/bin/ld: ../gmock/src/gmock-build/libgmock.a(gtest-all.cc.o): undefined reference to symbol '[email protected]@GLIBC_2.2.5' //lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status make[2]: *** [bin/AcceptorTest] error 1 make[1]: *** [CMakeFiles/AcceptorTest.dir/all] error 2 make: *** [all] error 2

    I can not find the solution for the error.

    uname -a:

    Linux lixiang-ubuntu 3.16.0-50-generic #67~14.04.1-Ubuntu SMP Fri Oct 2 22:07:51 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

    opened by lixiangnlp 6
  • Error compiling in Ubuntu 15.04

    Error compiling in Ubuntu 15.04

    [email protected]:/home/douglas/projetos/filtro/lib/proxigen/proxygen/wangle/wangle# cmake . -- Boost version: 1.54.0 -- Found the following Boost libraries: -- system -- thread -- Configuring done -- Generating done -- Build files have been written to: /home/douglas/projetos/filtro/lib/proxigen/proxygen/wangle/wangle

    [email protected]:/home/douglas/projetos/filtro/lib/proxigen/proxygen/wangle/wangle# make [ 18%] Built target gmock [ 74%] Built target wangle [ 76%] Built target BootstrapTest [ 79%] Built target CodecTest [ 81%] Built target CodelTest [ 83%] Built target GlobalExecutorTest [ 86%] Built target OutputBufferingHandlerTest [ 88%] Built target PipelineTest [ 90%] Built target RxTest [ 93%] Built target SSLCacheTest [ 95%] Built target SSLContextManagerTest [ 97%] Building CXX object CMakeFiles/ServiceTest.dir/service/ServiceTest.cpp.o /home/douglas/projetos/filtro/lib/proxigen/proxygen/wangle/wangle/service/ServiceTest.cpp: In function ‘int folly::main(int, char*)’: /home/douglas/projetos/filtro/lib/proxigen/proxygen/wangle/wangle/service/ServiceTest.cpp:324:3: error: ‘ParseCommandLineFlags’ is not a member of ‘google’ google::ParseCommandLineFlags(&argc, &argv, true); ^ make[2]: * [CMakeFiles/ServiceTest.dir/service/ServiceTest.cpp.o] Erro 1 make[1]: ** [CMakeFiles/ServiceTest.dir/all] Erro 2 make: ** [all] Erro 2

    uname -a Linux douglasnote 3.13.0-53-generic #89-Ubuntu SMP Wed May 20 10:34:39 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

    opened by cronnosli 6
  • Incompatibility with openssl3

    Incompatibility with openssl3

    In file included from /opt/local/var/macports/build/_Users_wyuenho_ports_devel_wangle/wangle/work/wangle-2021.11.08.00/wangle/../wangle/acceptor/TransportInfo.h:20:
    /opt/local/var/macports/build/_Users_wyuenho_ports_devel_wangle/wangle/work/wangle-2021.11.08.00/wangle/../wangle/ssl/SSLUtil.h:159:17: error: no matching function for call to 'CRYPTO_get_ex_new_index'
          *pindex = SSL_SESSION_get_ex_new_index(
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /opt/local/libexec/openssl3/include/openssl/ssl.h:2159:5: note: expanded from macro 'SSL_SESSION_get_ex_new_index'
        CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef)
        ^~~~~~~~~~~~~~~~~~~~~~~
    /opt/local/libexec/openssl3/include/openssl/crypto.h:242:12: note: candidate function not viable: no known conversion from 'int (CRYPTO_EX_DATA *, wangle::SSLUtil::ex_data_dup_from_arg_t, wangle::SSLUtil::ex_data_dup_ptr_arg_t, int, long, void *)' (aka 'int (crypto_ex_data_st *, const crypto_ex_data_st *, void *, int, long, void *)') to 'CRYPTO_EX_dup *' (aka 'int (*)(crypto_ex_data_st *, const crypto_ex_data_st *, void **, int, long, void *)') for 5th argument
    __owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp,
               ^
    1 error generated.
    
    
    opened by wyuenho 5
  • Does not build due to removed getTFOSucceeded member of folly/io/async/AsyncSocket

    Does not build due to removed getTFOSucceeded member of folly/io/async/AsyncSocket

    Downloaded and built FB Folly Now trying to build FB Wangle. Build is broken because wangle code still uses getTFOSucceeded which was removed from folly/io/async/AsyncSocket on August 9. Can't believe this hasn't been noticed so far...

    opened by spershin 5
  • test failure

    test failure

    Gentoo's CI had test failures

    12/14 Testing: SSLContextManagerTest
    12/14 Test: SSLContextManagerTest
    Command: "/var/tmp/portage/dev-cpp/wangle-2022.04.11.00-r1/work/wangle-2022.04.11.00/wangle_build/bin/SSLContextManagerTest"
    Directory: /var/tmp/portage/dev-cpp/wangle-2022.04.11.00-r1/work/wangle-2022.04.11.00/wangle_build
    "SSLContextManagerTest" start time: May 30 08:44 CEST
    Output:
    ----------------------------------------------------------
    [==========] Running 8 tests from 1 test suite.
    [----------] Global test environment set-up.
    [----------] 8 tests from SSLContextManagerTest
    [ RUN      ] SSLContextManagerTest.Test1
    [       OK ] SSLContextManagerTest.Test1 (2 ms)
    [ RUN      ] SSLContextManagerTest.TestResetSSLContextConfigs
    [       OK ] SSLContextManagerTest.TestResetSSLContextConfigs (4 ms)
    [ RUN      ] SSLContextManagerTest.TestSessionContextCertRemoval
    E20220530 08:44:30.200873    87 SSLContextManager.cpp:466] Cert for the default domain www.abc.example.com can not be removed
    [       OK ] SSLContextManagerTest.TestSessionContextCertRemoval (0 ms)
    [ RUN      ] SSLContextManagerTest.TestCertificateWithNoCN
    [       OK ] SSLContextManagerTest.TestCertificateWithNoCN (0 ms)
    [ RUN      ] SSLContextManagerTest.TestAlpnAllowMismatch
    [       OK ] SSLContextManagerTest.TestAlpnAllowMismatch (0 ms)
    [ RUN      ] SSLContextManagerTest.TestAlpnNotAllowMismatch
    [       OK ] SSLContextManagerTest.TestAlpnNotAllowMismatch (0 ms)
    [ RUN      ] SSLContextManagerTest.TestSingleClientCAFileSet
    E20220530 08:44:30.203253    87 SSLContextManager.cpp:491] error loading client CA folly/io/async/test/certs/client_chain.pem: std::runtime_error: SSL_CTX_load_verify_locations: No such file or directory; no such file; system lib
    unknown file: Failure
    C++ exception with description "error loading client CA folly/io/async/test/certs/client_chain.pem: std::runtime_error: SSL_CTX_load_verify_locations: No such file or directory; no such file; system lib" thrown in the test body.
    [  FAILED  ] SSLContextManagerTest.TestSingleClientCAFileSet (0 ms)
    [ RUN      ] SSLContextManagerTest.TestMultipleClientCAsSet
    E20220530 08:44:30.204098    87 SSLContextManager.cpp:491] error loading client CA folly/io/async/test/certs/client_cert.pem: std::runtime_error: SSL_CTX_load_verify_locations: No such file or directory; no such file; system lib
    unknown file: Failure
    C++ exception with description "error loading client CA folly/io/async/test/certs/client_cert.pem: std::runtime_error: SSL_CTX_load_verify_locations: No such file or directory; no such file; system lib" thrown in the test body.
    [  FAILED  ] SSLContextManagerTest.TestMultipleClientCAsSet (0 ms)
    [----------] 8 tests from SSLContextManagerTest (11 ms total)
    
    [----------] Global test environment tear-down
    [==========] 8 tests from 1 test suite ran. (11 ms total)
    [  PASSED  ] 6 tests.
    [  FAILED  ] 2 tests, listed below:
    [  FAILED  ] SSLContextManagerTest.TestSingleClientCAFileSet
    [  FAILED  ] SSLContextManagerTest.TestMultipleClientCAsSet
    
     2 FAILED TESTS
    <end of output>
    Test time =   0.03 sec
    ----------------------------------------------------------
    Test Failed.
    "SSLContextManagerTest" end time: May 30 08:44 CEST
    "SSLContextManagerTest" time elapsed: 00:00:00
    ----------------------------------------------------------
    

    see https://bugs.gentoo.org/848459 log https://848459.bugs.gentoo.org/attachment.cgi?id=781391 test log https://848459.bugs.gentoo.org/attachment.cgi?id=781394

    opened by Alessandro-Barbieri 0
  • Problem linking libsodium

    Problem linking libsodium

    Hi guys, I am trying to build an example program and link wangle.

    I got the following error:

    -- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found version "1.71.0")  
    -- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found suitable version "1.71.0", minimum required is "1.51.0") found components: context filesystem program_options regex system thread 
    -- Found folly: /usr/local
    -- Found Threads: TRUE  
    CMake Error at /home/taylor/bin/clion/bin/cmake/linux/share/cmake-3.20/Modules/CMakeFindDependencyMacro.cmake:47 (find_package):
      By not providing "FindSodium.cmake" in CMAKE_MODULE_PATH this project has
      asked CMake to find a package configuration file provided by "Sodium", but
      CMake did not find one.
    
      Could not find a package configuration file provided by "Sodium" with any
      of the following names:
    
        SodiumConfig.cmake
        sodium-config.cmake
    
      Add the installation prefix of "Sodium" to CMAKE_PREFIX_PATH or set
      "Sodium_DIR" to a directory containing one of the above files.  If "Sodium"
      provides a separate development package or SDK, be sure it has been
      installed.
    Call Stack (most recent call first):
      /usr/local/lib/cmake/fizz/fizz-config.cmake:53 (find_dependency)
      CMakeLists.txt:10 (find_package)
    
    
    -- Configuring incomplete, errors occurred!
    See also "/home/taylor/CLionProjects/wangle_ex/cmake-build-debug/CMakeFiles/CMakeOutput.log".
    See also "/home/taylor/CLionProjects/wangle_ex/cmake-build-debug/CMakeFiles/CMakeError.log".
    make: *** [Makefile:179: cmake_check_build_system] Error 1
    

    I have libsodium-dev installed via apt-get. Do you guys know what might be wrong? Thank you for your help in advance!

    opened by tribecany 3
  • Function with noexcept specifier throws exception causes program terminated

    Function with noexcept specifier throws exception causes program terminated

    The following function in wangle acceptor could possibly throws an exception in makeNewAsyncSocket https://github.com/facebook/wangle/blob/master/wangle/acceptor/Acceptor.cpp#L305

    While I didn't find any catch phrase that could handle this exception, thus when create new async socket failed, the exception causes the whole program terminated.

    My question is, is that normal or should I override this function to deal with exceptions on my case?

    opened by zER0pAGe-1 3
  • very poor performance with echo example

    very poor performance with echo example

    hello guys,

    I change echo example code a little bit. I let client keep send 4K String, I want to measure the performance for wangle, but I see the performance is truly bad.

    below is sar result. ./bin/EchoClient --host=127.0.0.1 ./bin/EchoServer

    08:52:11 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 08:52:13 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:52:13 AM ens3f1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:52:13 AM enp24s0f2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:52:13 AM enp24s0f1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:52:13 AM ens3f0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:52:13 AM lo 1791.50 1791.50 6718.22 6718.22 0.00 0.00 0.00 0.00 08:52:13 AM enp24s0f3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:52:13 AM enp24s0f0 20.50 23.50 1.44 3.17 0.00 0.00 0.00 0.00 ^C

    Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil Average: docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: ens3f1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: enp24s0f2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: enp24s0f1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: ens3f0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: lo 1763.32 1763.32 6685.85 6685.85 0.00 0.00 0.00 0.00 Average: enp24s0f3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: enp24s0f0 22.61 24.57 1.69 3.30 0.00 0.00 0.85 0.00

    opened by gwnet 0
Releases(v2022.08.08.00)
  • v2022.08.08.00(Aug 8, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.08.08.00.zip)= 7197c9079933ca51ec3b0aba2757be011f9000dbbcf8d2dc1aa936533ae8f439
    • SHA512(wangle-v2022.08.08.00.zip)= f4288b9c75ae1336cf9400373141e34a55b2081b553075d026505078d88703611109105784d33a9957fbc741881aee82f8e1f2b897786468257638a0e61ae188
    • SHA256(wangle-v2022.08.08.00.tar.gz)= b0e4f1beda451e3a35547d250531eb40950fe1d376dd6dc0282e21b1709eb4d8
    • SHA512(wangle-v2022.08.08.00.tar.gz)= 20213c768c298abe4c1d07218e3464740f88bafcd15c3798f60285e7820123502c01935eb3af473c4f9a06bd50a7b7dbceb9625e32c0b448a57522a28d742f3e
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.08.08.00.tar.gz(328.34 KB)
    wangle-v2022.08.08.00.zip(537.53 KB)
  • v2022.08.01.00(Aug 1, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.08.01.00.zip)= c545d7a029edf98f4d017775d4e10241ef85a68af5ef8fc15a673ae6125bdbca
    • SHA512(wangle-v2022.08.01.00.zip)= 0c01c919e3e6664c31d12b6923eea6b41328e0560d5a79180e1b8e94bac9c50d34fb7776c9470785d2059e738d42408469d4272df72e6b47d30692b5cf7b944b
    • SHA256(wangle-v2022.08.01.00.tar.gz)= ccc73735fe10f98227fae4182cb7c84b1cc86dcea3eb6dd1ae530bb2701ff0f7
    • SHA512(wangle-v2022.08.01.00.tar.gz)= f5ffb89341defb8c3951f45a7758bc157683024d69dd740a26ab82b3db9bb3a5e35d3b4e62b1a5a85972d14daaebe73005656f007818238822c06909fe3cec01
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.08.01.00.tar.gz(328.34 KB)
    wangle-v2022.08.01.00.zip(537.56 KB)
  • v2022.07.25.00(Jul 25, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.07.25.00.zip)= 9de85c71662c238cd2f7f2d3356f833f933cddd897291bbf04dbe70e3355d657
    • SHA512(wangle-v2022.07.25.00.zip)= 8aa9db8366ef70d9c2a7c47b8dd57c64d716b43268e073f3b838295de9c9181b4f90e10d1e274cf1f1f139f29a3bef3f7f5bc5bc706608c7a2948d60bcc947c6
    • SHA256(wangle-v2022.07.25.00.tar.gz)= 0b8dbd2d4c9e33b868035da96ff63796b93dd39e59ce9c0f8de778f77401f548
    • SHA512(wangle-v2022.07.25.00.tar.gz)= a29eb1802cacc46197bd604c42c3fb6fe04718a4c6ec71304a5ddb66ce712ccb5e54ab40b7d81a294095e9e4c7b3ca2972a86c2246fbe43d843ca2db5f1a9c60
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.07.25.00.tar.gz(328.11 KB)
    wangle-v2022.07.25.00.zip(536.66 KB)
  • v2022.07.18.00(Jul 18, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.07.18.00.zip)= 88b95930880bb031f43ceacd4ba69301d75b336e0e1635b42f192eea1aac8e62
    • SHA512(wangle-v2022.07.18.00.zip)= 9ad83f599ff5aa87bc5235fedb04feee936da1a054dcdc986bba1ec74a81b7b19de3ce05ed4b6a348f10e1667d4235ebcc04a70812aa93dc6e5890583b9a2cd0
    • SHA256(wangle-v2022.07.18.00.tar.gz)= 7ae5f0f66cd29a07ef00ac47cc2bbf37f793f1783a384ba009b5ff15e5073968
    • SHA512(wangle-v2022.07.18.00.tar.gz)= aba681dc4c5b87d508e1ab054960727242edce017221ddc728d944d7553975c8ae8b8d994ebc4d1ff8cead9f76566277e4e43a24677739bc1d952f9bca8e089b
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.07.18.00.tar.gz(327.76 KB)
    wangle-v2022.07.18.00.zip(536.22 KB)
  • v2022.07.11.00(Jul 11, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.07.11.00.zip)= 2574efc66e8d5fa02f24db9c7fc9f440f3515f356f4044f156b18843d9c04942
    • SHA512(wangle-v2022.07.11.00.zip)= eec9d8a63f2d45ef64f60d408241082d67020d61aeac9ee523ad7dc60ace2cc59abaf4e447cb52deed7031e2d8fd226c03bb21cc944694ea9d3b6cf4347e3c9a
    • SHA256(wangle-v2022.07.11.00.tar.gz)= ce4f7c6533d3964072ea447fd6d58f40305de3dcdcbf3964cf9bc196853922e4
    • SHA512(wangle-v2022.07.11.00.tar.gz)= 90e6d510049315ecb847aced1527c00393aafeb32e822573a954be470f66bd80b4a9e424cecbc6d331258cbc4c81cc9e54cbc620851e1b4d027c5a3f8b3e7bd8
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.07.11.00.tar.gz(327.70 KB)
    wangle-v2022.07.11.00.zip(536.15 KB)
  • v2022.07.04.00(Jul 4, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.07.04.00.zip)= 9d9298c50c76533556f61a7e97838c23b0aaa153246a32a31f8082a592bfbcde
    • SHA512(wangle-v2022.07.04.00.zip)= 9c4ebb72e9fdaf8f1d0c69bafcbf834e59bc131dc26b1e9938b03fed993cf332017904ae3a4401d09a197830ea1f5a38727e4025288acc23bcdd87e8f46f46bf
    • SHA256(wangle-v2022.07.04.00.tar.gz)= 8c7b538f9e9d84162056d6dc757bea1d0d4c0978889469f10e9d05b1dc4e5a83
    • SHA512(wangle-v2022.07.04.00.tar.gz)= e40d24b55a0247fea9a46ba0a8999a600276a6f4540e9d7e535be0cdf8d447104e1e1de074cf32194feec930cbbac26673bb514665f8dfce8104b5bda2f65bec
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.07.04.00.tar.gz(327.83 KB)
    wangle-v2022.07.04.00.zip(536.24 KB)
  • v2022.06.27.00(Jun 27, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.06.27.00.zip)= 764d6e1d62272e46b1cb6ed7da2b8da54f72ad946fe9fc584c326d7d0d72a5d8
    • SHA512(wangle-v2022.06.27.00.zip)= ac4fca640d22120399e5d45318a4a663b15528790eef64125f583d38707bf53342c2ba000cfed0488570214f719fcd66dc76215f9f9d5d24609243b06a67966a
    • SHA256(wangle-v2022.06.27.00.tar.gz)= e2be19a61593455ae03b99dc36247fedbbf3d9f7521065e78f85d838568dd139
    • SHA512(wangle-v2022.06.27.00.tar.gz)= aeada92feba0795e540c7b3600219855f63a7714907b5bf35478357265e539757ad98c1a055cc345515041a40735812b3c9417576fee5e8c6854ee2f1be6d833
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.06.27.00.tar.gz(327.78 KB)
    wangle-v2022.06.27.00.zip(536.19 KB)
  • v2022.06.20.00(Jun 20, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.06.20.00.zip)= 692e85d1b89d903981ec34db7159fc788dc4ab1dfd9bf98656e322ffc11252bb
    • SHA512(wangle-v2022.06.20.00.zip)= f7da019b6cf5ea4361e6d430865d592d2e19711d46d5756679e0181c3e32b6dcfdf7c6a4bbb61c69846b44e40d7adbbc4665ad22fe3a5db6be51454bc5738598
    • SHA256(wangle-v2022.06.20.00.tar.gz)= b6bc1ffb128b30a46132d730a52ae928fb88a93534927633bd37d1c13ba363e4
    • SHA512(wangle-v2022.06.20.00.tar.gz)= 9b12a55c1c7cab24a8e771c5967a1517ae79578750adb9cf5833a9ee2246f197245df28038a76daaed5f8fa1814c1682b22ab07b38c9ec396abbadc0c5405348
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.06.20.00.tar.gz(327.69 KB)
    wangle-v2022.06.20.00.zip(536.04 KB)
  • v2022.06.13.00(Jun 13, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.06.13.00.zip)= 3b229a414e02f5cda4d677185b19b43eb9ddada82d10d902c7156f851192521d
    • SHA512(wangle-v2022.06.13.00.zip)= 6876e78bb90468e670d46889ab4abdc94a9e5d90dc805c93dc4bd46fac4a6268350d37a2a85eb16d20ff627df329642d180f90ffb545f50946d5931003dda4aa
    • SHA256(wangle-v2022.06.13.00.tar.gz)= 00b779433db0b940f7400a5c119b082d381b115e5aac151f48a3fa65a5f27f95
    • SHA512(wangle-v2022.06.13.00.tar.gz)= 57676c8df8c2e494096210afa8d38c7b56f8c8f78fb0a56ba14d174127ad4648dce6c508b95b015b321d2eab01e6b3a94cffa5b099006074e287d1e62d823ed2
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.06.13.00.tar.gz(327.70 KB)
    wangle-v2022.06.13.00.zip(536.02 KB)
  • v2022.06.06.00(Jun 6, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.06.06.00.zip)= ad247c296df2dd0eec1a2a1d72b7694187d2e0cbffd3025b63a4b5e9c96ad2c3
    • SHA512(wangle-v2022.06.06.00.zip)= afa4afd9f25b5ad262c2e8360b4ca744e242fadb54c743eade643b924f0592c702691fa718b838bb00a2b7c952ca3600389eba999114d5fac07b4f0266dfc077
    • SHA256(wangle-v2022.06.06.00.tar.gz)= 76ee18993616690c278187beffd76301934065e21c76a90ff694a86bed6cfbf3
    • SHA512(wangle-v2022.06.06.00.tar.gz)= 02d94058aa2e3bbd4dcc96cb26036a90386112df0436a585ec9d786c40db5308f05844d55ddafa4d618182075ff53b371348294fbcc97ba163ba92b8441f72d3
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.06.06.00.tar.gz(327.22 KB)
    wangle-v2022.06.06.00.zip(535.36 KB)
  • v2022.05.30.00(May 30, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.05.30.00.zip)= d5828da3bc3eae07785d69abb1653b9c98823a36d9f7bc4a31b537b334466f57
    • SHA512(wangle-v2022.05.30.00.zip)= a8e501609ecefe0e2da326be2f495dd18fae3556ab40d09a33de90e9cf70b09b584e9b337bb3fba79c2a5dfc43206fe1a50b920891afef41e77a9f193789b448
    • SHA256(wangle-v2022.05.30.00.tar.gz)= 34b056fa3f64ab3c1e3dff9d24167e5a403f92cc765222396f3ed73fa8a56eff
    • SHA512(wangle-v2022.05.30.00.tar.gz)= 2247f6f2d897a60aac18b00e815a9cdf39ffe5efadac2a4a72d688c04566d04aac6e9c5baeb0c566016c4bfcd8ef420ad23f916acf5f69d174a67af7a10d058c
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.05.30.00.tar.gz(327.25 KB)
    wangle-v2022.05.30.00.zip(535.67 KB)
  • v2022.05.23.00(May 23, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.05.23.00.zip)= f2b1411cacf86e540221e09facad98a5ba211911b054b07f54759f1308de540a
    • SHA512(wangle-v2022.05.23.00.zip)= 411575ff45a3e64baa6147ce90c1ccda01fdff7bea0b2ade8733b763926e78cc5ab963cce83e718bd7a6381eb0120a9fe1055722f4dbd392e287e5c49f7bc718
    • SHA256(wangle-v2022.05.23.00.tar.gz)= 1646634a65ddeda4f579b92b71c26e17a48c376c84988557dd5ef74381505723
    • SHA512(wangle-v2022.05.23.00.tar.gz)= a7072d655b16458f7fb5261d13e96ed5946468a9a478f1e02fcfab69c55749033cfc2e96cb9eddbcfb05c470a93fa4649bf8a8fcd1e97207c312584227022d88
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.05.23.00.tar.gz(327.28 KB)
    wangle-v2022.05.23.00.zip(535.67 KB)
  • v2022.05.16.00(May 16, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.05.16.00.zip)= 62e6c028c038dc44d964c43da99048101a9f46569092b5c458de886664a19c21
    • SHA512(wangle-v2022.05.16.00.zip)= 20e83f6866673ad044ab5606985c8a82b8c7c26242c4df8736c62b939ab67b9676bc8d853e054edb43084227812827e164071e773c7ca03e13debbe69aa7c2fa
    • SHA256(wangle-v2022.05.16.00.tar.gz)= 5f398a5e6219a6bfb6078072b40deec76c80d6a54b20b46a224508ebb5299edf
    • SHA512(wangle-v2022.05.16.00.tar.gz)= 554f224df29186d393cd94c1e0fad4cd87b7dc49b06e07f33c8c11577dca0e0ae538cf8dbc81ff1b773ca6e965651e3fe1edd78821dbad80b107cb26c1e4225e
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.05.16.00.tar.gz(342.94 KB)
    wangle-v2022.05.16.00.zip(561.05 KB)
  • v2022.05.09.00(May 9, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.05.09.00.zip)= b278ac815ccc2228a57e7f6a44c16ded2c14ad383f50027deec4a064c2860196
    • SHA512(wangle-v2022.05.09.00.zip)= b3bcf868a4d5cc2b9745ad0a7b382a8fa2673a931086b455dc75e8192e0587c625c3a5c78545c232cbfa4c5f85d3ed26da6a023f641de6c11772477862374316
    • SHA256(wangle-v2022.05.09.00.tar.gz)= 4d090111ed16c0c3f93c99e6b5fd870b79fbab4067aab007fa502c64eba96ed4
    • SHA512(wangle-v2022.05.09.00.tar.gz)= 72080d97262570223b3d93abb23ac4e2d9c3a985746d82c343a742de115418f911a315bf159d52caad1ca98825c69cea90fb7c9f04a8f139648322225fcfd624
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.05.09.00.tar.gz(342.49 KB)
    wangle-v2022.05.09.00.zip(560.30 KB)
  • v2022.05.02.00(May 2, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.05.02.00.zip)= 53432167da239fcf94e8f004c853d5473b2443f519e9221b0d146ad04b7b8675
    • SHA512(wangle-v2022.05.02.00.zip)= 72961b0a4f3a23d223430402e406a946887867c834399b37223961d6f7398c53303e52fcd390591af935ba8f8697570a2fc7a0ce0f4324bebc2f5cb7fca2fc44
    • SHA256(wangle-v2022.05.02.00.tar.gz)= 9cbc509c4088c41073d4aa95453cb48e97fde517fe150ea99ef5e10d100723bf
    • SHA512(wangle-v2022.05.02.00.tar.gz)= c1562d9889e863f1e963156f3440642ab98a7e42404550f5dd8ff95157862c225f11a9a8fadcdbafc7b3fc5cc0732496969a9a05220914ad7e109cc3f4018da4
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.05.02.00.tar.gz(342.48 KB)
    wangle-v2022.05.02.00.zip(560.26 KB)
  • v2022.04.25.00(Apr 25, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.04.25.00.zip)= 081abbbbadbd7af71471a7806f3d92578090280b7e75f4667e3cbc0eb4ad9f90
    • SHA512(wangle-v2022.04.25.00.zip)= b1f97425480a59ff5b0c1fe7ba12806d551ad67b0f58db42fe60a06266cde85063f4da3ef708ffa88cf1d26dd9d766f3d9bd062de23c6e4d3351dd966d1c58a4
    • SHA256(wangle-v2022.04.25.00.tar.gz)= c13aba22b309e0236485b0a2aab7804960d3c5604e6eb303996d446c700f81ea
    • SHA512(wangle-v2022.04.25.00.tar.gz)= fb6472cb5d5e34a8082136a5173a450ef476d26eedcc14df605e1570481bc060f088ff16ac1e0dcf9bfba24e80720d659c94a54d16ba52c578bb28a427073227
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.04.25.00.tar.gz(347.26 KB)
    wangle-v2022.04.25.00.zip(566.28 KB)
  • v2022.04.18.00(Apr 18, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.04.18.00.zip)= 9df1c916455893c9a33fb0ed2137cea8cb2f21f8f1749f14a96d748d8bfe8fde
    • SHA512(wangle-v2022.04.18.00.zip)= d484d79745274327f3d80b78ceaa7b024b6916ec91b4b2e6f1a193e023621593f401a977faf1bacd416838f0a1b9bb89f59413e5dba86d3eecff0b19f1552cde
    • SHA256(wangle-v2022.04.18.00.tar.gz)= 786e295fe05e07e0075240cbd06d0aabba1c8495c97d8e5b7d9a3d2a47f8beab
    • SHA512(wangle-v2022.04.18.00.tar.gz)= 3ea68eeede368a85b9a7a7aef91c018b7f20bf58dd4e72706d128aef3043add2bc05c02855d405701e9e06ff07cfff71dde5f35064e444c2232a8c7502037383
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.04.18.00.tar.gz(347.28 KB)
    wangle-v2022.04.18.00.zip(566.29 KB)
  • v2022.04.11.00(Apr 11, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.04.11.00.zip)= 8188a98674056286adcfbd85c4ecb8a33f4886912cd02a18361a7e80f3bcb86f
    • SHA512(wangle-v2022.04.11.00.zip)= 727bbd9c64ba7c5b97114d7f039af2ecd3144d7083b9029e37c9a6d644114dcdb070e8f078c398c8486d0940984dc084318a0f63da75a04d3018d088129874ee
    • SHA256(wangle-v2022.04.11.00.tar.gz)= dd3449a9307c6d49ecfa7b01b8448a6a719eec0adc2871b469b2037799a67f71
    • SHA512(wangle-v2022.04.11.00.tar.gz)= 208544dc8656585a4eace9efe12a7145a454adae53e3435d852baada14f7083c965b2edbe5c0df3714490769d0d6cca70f4273e20d32229097db8e13ef82c7c2
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.04.11.00.tar.gz(346.75 KB)
    wangle-v2022.04.11.00.zip(565.48 KB)
  • v2022.04.04.00(Apr 4, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.04.04.00.zip)= d85e1cf30018075b95081ad706a8d17dc9f0675989cc4fae365353913300bffa
    • SHA512(wangle-v2022.04.04.00.zip)= 05bc3fb91aced6c7dd497a0ffa6f2242c0b345a6a8cf050ebf1f339fa302b6eeadad08ab8c7c7f998911d6aca0a0d47047cd50f6677abc554f5ef5cd0e6d7d5d
    • SHA256(wangle-v2022.04.04.00.tar.gz)= c42199da7705f20dc283b0c185c9a827f01ae8280a90138084126e1456a950a7
    • SHA512(wangle-v2022.04.04.00.tar.gz)= c1e6f1c4c0adbbb62859a9b6c1c1f55be2aa40c12adb3d4e6e5e099160cd24150b760513ea3e438ad89286cfb5b7ede8fd19f50b455b45b95377301b48063f46
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.04.04.00.tar.gz(346.69 KB)
    wangle-v2022.04.04.00.zip(565.13 KB)
  • v2022.03.28.00(Mar 28, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.03.28.00.zip)= f0ffe5afe8efcf7c01135ecfae361bb05d3de011b3c8da8f10c3f4df8e653b82
    • SHA512(wangle-v2022.03.28.00.zip)= 2688176b8bb712d4e12055e947045c4994f88ff7684c6542b913855b8a3d98bcd8dd74b6db888963d85d95dc7f99422359aa142e7ecc9fb5afa58de932038559
    • SHA256(wangle-v2022.03.28.00.tar.gz)= 5cd5b4c3271263ab1c28a63f697cc06a56d13f78b20874d50cc744640b48b4e6
    • SHA512(wangle-v2022.03.28.00.tar.gz)= 85bf272a71994c940d0863463b00a3184b95a3d0dee57777ac1c8164b0740afb9539cc779870a9e2f51cfb619c57eb01a6aaa175a478720a680d2d97b0ab6541
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.03.28.00.tar.gz(346.67 KB)
    wangle-v2022.03.28.00.zip(565.12 KB)
  • v2022.03.21.00(Mar 21, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.03.21.00.zip)= b2b989f382b743e9e404a93237766d830b50f07ed83719431b21bcb705482e59
    • SHA512(wangle-v2022.03.21.00.zip)= fb3b8ca0080132b3cd98443c76ba0190b20300b29e575c5589fa3265298132080e3da39e5bcdae2608239c0d6362c0e4e1b214a1d590107e3dac41fb70d89d07
    • SHA256(wangle-v2022.03.21.00.tar.gz)= 3557884c78cd5b4ebf4ee48c89e056b30453f5e9a1f24e89e170b31e94fcdf90
    • SHA512(wangle-v2022.03.21.00.tar.gz)= 0536389028d8b322cee28b6f87f60ab36e4652c64385ec6a51e0502e200b06e144f53d3030d20b2843a04afbb9f495d4c4d362afe51b79f64d2e6e0a21f1b9d1
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.03.21.00.tar.gz(346.66 KB)
    wangle-v2022.03.21.00.zip(565.11 KB)
  • v2022.03.14.00(Mar 14, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.03.14.00.zip)= df3b9fcb82dd3962fa185db08ac0080d86c13d21ad01927f7241a502906cfcdc
    • SHA512(wangle-v2022.03.14.00.zip)= d8726556fa5fc3a3a49e55529fe72ae154c6960a3db99a354e2ad1d0f404cc60ce0fc92a569963a7108e4675699e8967b8a9951d0b9f043264b647addb0768a7
    • SHA256(wangle-v2022.03.14.00.tar.gz)= 3586bcd5132c9eb7b7656b7de7164ffbe4d8fd24877cdf5101450758b9a2b4a0
    • SHA512(wangle-v2022.03.14.00.tar.gz)= e4a59df3905ddac208c4ee557ba203a580975d1009f4cc4499f3dcf951d72d7e5a97fd893a0f00f092f8b1401777c8c1764ad407aa538fedccf941f3bde3328d
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.03.14.00.tar.gz(346.18 KB)
    wangle-v2022.03.14.00.zip(564.53 KB)
  • v2022.03.07.00(Mar 7, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.03.07.00.zip)= 9fa1d87f1c3f469ecb6f344d2f8750f2918aa100a72b114970bf68971b9e2e38
    • SHA512(wangle-v2022.03.07.00.zip)= bcf7be1d7e5eafaf245c7c06fa137dbb96bcffd7367521d3e6980a29ad35e712278111b3b331a685246b307b9788c88ed744e08ba8db305424b6023c626bc034
    • SHA256(wangle-v2022.03.07.00.tar.gz)= 099bc671182b3655690f07b052283c9af17ec5f8abae995afffb9bc7c3037958
    • SHA512(wangle-v2022.03.07.00.tar.gz)= f92464453fd540779b5cae1b2cf776b91f0a2d6930b80b0bfd43114dcbee933012e4dcc3f930492c1b14add84244dc96b28afb981693f5b98055cb47b7f4552a
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.03.07.00.tar.gz(346.16 KB)
    wangle-v2022.03.07.00.zip(564.51 KB)
  • v2022.02.28.00(Feb 28, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.02.28.00.zip)= c7c0a75ab648c4c170b187175278848238dd84d9a8ebe0d30798edc38112d53b
    • SHA512(wangle-v2022.02.28.00.zip)= 6c9dc361360cbc87cb110aa40e7b40aa42f620fcf077faf01175cb1f6e39764db3fc6ecc1f736353ea9bcd9b54149215020265b0349c0575e03d25b9b6f1dfc7
    • SHA256(wangle-v2022.02.28.00.tar.gz)= 9c4f6390329a4224ddb738e0444bc36ea308ee6b9b00558d420e40a7637a3087
    • SHA512(wangle-v2022.02.28.00.tar.gz)= e2b2a36d64602f58897a72bf8530b125e1351e8ec091802cbed1fdce31c16ecbc4b5408c542406b54158a91bc85aec45eef2344eff12651ba239a49156659cc1
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.02.28.00.tar.gz(345.96 KB)
    wangle-v2022.02.28.00.zip(563.97 KB)
  • v2022.02.21.00(Feb 21, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.02.21.00.zip)= c599effaf1999836878b123130dd4bce93f1a02b28755eb9c4631898fbc79224
    • SHA512(wangle-v2022.02.21.00.zip)= f284f535c8f9082ff28b2f88eefeb15d598107de7949b41156620c7d6117bedac921f10d8c65e1571360fc72000e4f70aa6a7af266f837e0902ff16749aa6bcf
    • SHA256(wangle-v2022.02.21.00.tar.gz)= 6e787c10b7f58b5665e58eee2cbfa5cb088c61401db0268633b19ef6ab1db6f3
    • SHA512(wangle-v2022.02.21.00.tar.gz)= 2795c6e5eba6368d44e265d45a144b7df6fd9c8b21bce4da4aa8ac0b5e46a6cb5a2820754ee15c040fe152606b21135b9fc40af89862793b78591a647df6c74c
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.02.21.00.tar.gz(345.93 KB)
    wangle-v2022.02.21.00.zip(563.92 KB)
  • v2022.02.14.00(Feb 14, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.02.14.00.zip)= 5fbd5765fda7088a788f058ea62259823c3572dc0b261e39b8df7f41b3fafa01
    • SHA512(wangle-v2022.02.14.00.zip)= 9b8371bffdf9f9809b2e755ed5a597b53f7992d8bc534cb0d00ce140d72f17529c56c57c985d33fa826cb6ede0c1492b05d401c2cc7292046c9debb1dfce6580
    • SHA256(wangle-v2022.02.14.00.tar.gz)= edf14f80c859c0e598c842667773ee589249f7082d8a7265ab08ba91970a1f15
    • SHA512(wangle-v2022.02.14.00.tar.gz)= 97e180e3c6d015146f76234c116e425c9a7e277d1f242d9ec519175afe3e1f731af2d6c0233589cbf52c85ed916a3234016b354c62b01b9a2218fbe4652f9827
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.02.14.00.tar.gz(344.57 KB)
    wangle-v2022.02.14.00.zip(561.99 KB)
  • v2022.02.07.00(Feb 7, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.02.07.00.zip)= 3c7a0f1f8cdd49476a56e8c7c76cb6356755c42aa29424d5fd4e9ad7f6b4964e
    • SHA512(wangle-v2022.02.07.00.zip)= 502096ae13ad65eeb48aefda19d868e518ebff9ec217064b1c50e41c63037fc4d2d7b9aec919e9332868b86bd6251839963f6883bdbbdb6f9533e979e49532a6
    • SHA256(wangle-v2022.02.07.00.tar.gz)= 1afb036daa12dd803be3111ca82c5b5674e85ff1fd776a07ed27940945d607cf
    • SHA512(wangle-v2022.02.07.00.tar.gz)= 90de3bfced897c54b149f959d222c5e9c09a76d71ffe16f42d71810258222badbb8ef9d68fb668b696d1d2a1a88eac361d245471c69f902beb3ba3e5ec5fd629
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.02.07.00.tar.gz(342.78 KB)
    wangle-v2022.02.07.00.zip(559.83 KB)
  • v2022.01.31.00(Jan 31, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.01.31.00.zip)= 1587f97cb822aabe256d9737567a253e174c21d116dcab5409050a38f346d908
    • SHA512(wangle-v2022.01.31.00.zip)= a2d97d3a30b4a6147f8fd3d4fc6574c27cdef2e16727b6b8726aadf3226a3d2d255f1c9a6659a306341dd13823aa78fa3c75f564f8d8c537a17b7be3f0b2e006
    • SHA256(wangle-v2022.01.31.00.tar.gz)= 1002e9c32b6f4837f6a760016e3b3e22f3509880ef3eaad191c80dc92655f23f
    • SHA512(wangle-v2022.01.31.00.tar.gz)= 16dd74ec179e91f0ced8a41c2da7858d15e0ad9219248e83437c133ad0dd480f2baef6c8ae5a40fdff0e12b3cceac8b1c9132935663837c312cb1af288985770
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.01.31.00.tar.gz(337.29 KB)
    wangle-v2022.01.31.00.zip(553.38 KB)
  • v2022.01.24.00(Jan 24, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.01.24.00.zip)= 51950fffda69a61dfda042e787458dce3040ba78cc409de98e7d305ea65736b1
    • SHA512(wangle-v2022.01.24.00.zip)= de2db2c6a71ff1f0cf91e3e4cacbc31b3bbf72b25a482db6c84da98e0f607430392c2754ff1ee0cacb4666bb175f174e7f2e10a0dd8bcaf08e087f48381def77
    • SHA256(wangle-v2022.01.24.00.tar.gz)= a0332dcab35f80cf22eaf9fe313141edf764803c0c31df7eba4d765e20fee70e
    • SHA512(wangle-v2022.01.24.00.tar.gz)= ab44bcea4ee446794f5c002e3f5a4802abd9ee8c2efb482ed7f0add5e51857e3b8a561592cbd0569fcad47710bdf2385b963ed4b948602342b57e34a1a3788bc
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.01.24.00.tar.gz(337.33 KB)
    wangle-v2022.01.24.00.zip(555.23 KB)
  • v2022.01.17.00(Jan 17, 2022)

    Automated release from TagIt

    File Hashes
    • SHA256(wangle-v2022.01.17.00.zip)= 42dd6d316e3354be1e40be63b56adea418a89488f84272a905c7c1aab5a3f1b7
    • SHA512(wangle-v2022.01.17.00.zip)= 33317da77047dea4835cd2c417269eaa134417cdfc5e5a83310c873e6dd5d768be67f772c7501e540c7822b53a2a7df83a2b39995d9c2a4c495031d3e1a529a3
    • SHA256(wangle-v2022.01.17.00.tar.gz)= 64ef567ed331cc6c3f9107a344d347e795beb2cb61d255e46130b1f5ead25cb3
    • SHA512(wangle-v2022.01.17.00.tar.gz)= 1b684c70c4ac14b904471aafb9fd8a8a6295fb36da302e16652b71a66d1db904d3f5f8eae8905156e6be2e618a32b8bf26c13f3d212f6ae5025a8fb072741c24
    Source code(tar.gz)
    Source code(zip)
    wangle-v2022.01.17.00.tar.gz(337.03 KB)
    wangle-v2022.01.17.00.zip(554.99 KB)
Owner
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
Facebook
LAppS - Lua Application Server for micro-services with default communication over WebSockets. The fastest and most vertically scalable WebSockets server implementation ever. Low latency C++ <-> Lua stack roundtrip.

LAppS - Lua Application Server This is an attempt to provide very easy to use Lua Application Server working over WebSockets protocol (RFC 6455). LApp

null 47 Apr 25, 2022
This API uses both composition and inheritance to provide a generic way to set up a custom server with a custom communication protocol and custom middlewares

Ziapi Summary Introduction Installation Introduction This API uses both composition and inheritance to provide a generic way to set up a custom server

Aurélien Boch 8 Apr 22, 2022
Ole Christian Eidheim 737 Aug 6, 2022
Pushpin is a reverse proxy server written in C++ that makes it easy to implement WebSocket, HTTP streaming, and HTTP long-polling services.

Pushpin is a reverse proxy server written in C++ that makes it easy to implement WebSocket, HTTP streaming, and HTTP long-polling services. The project is unique among realtime push solutions in that it is designed to address the needs of API creators. Pushpin is transparent to clients and integrates easily into an API stack.

Fanout 3.1k Aug 4, 2022
Provide translation, currency conversion, and voting services. First using telnet you create a connection to a TCP socket, then the server connects to 3 UDP sockets hosted on other servers to do tasks.

to run micro servers g++ translator.cpp -o translator ./translator <port 1> g++ voting.cpp -o voting ./voting <port 2> g++ currency_converter.cpp -o c

Jacob Artuso 1 Oct 29, 2021
A C++ async HTTP client library to use in asynchronous applications while communicating with REST services.

libashttp An asynchronous HTTP library using Boost.ASIO as the backend. This project is licensed under: Usage Here is a example usage which is taken f

Tolga Hoşgör 52 Jul 3, 2022
Enabling services on your device 68 Aug 16, 2022
A Tcp/Ip stack implementation on top of Solarflare ef_vi, and a C++ headers only framework for tcp multiplexing client/server.

Efvitcp Efvitcp is a tcp library using Solarflare ef_vi interface on linux, and also a tcp multiplexing framework for both C++ client and server progr

Meng Rao 19 Jul 25, 2022
The InitWare Suite of Middleware allows you to manage services and system resources as logical entities called units. Its main component is a service management ("init") system.

InitWare isn't ready to use yet!! Unless you are doing so for fun, to experiment, or to contribute, you most likely do not want to try to install Init

null 152 Aug 12, 2022
C++ ChrysaLisp services and messaging.

ChrysaLib C++ ChrysaLib ! A version of ChrysaLisp system concepts written in C++. Dependencies Mac via Brew brew install libusb asio Linux via apt-get

Chris Hinsley 3 Jan 10, 2022
A modern C++ network library for developing high performance network services in TCP/UDP/HTTP protocols.

evpp Introduction 中文说明 evpp is a modern C++ network library for developing high performance network services using TCP/UDP/HTTP protocols. evpp provid

Qihoo 360 3k Aug 12, 2022
Examples for individual ROS2 functionalities inc. Subscribers, Publishers, Timers, Services, Parameters. ...

ROS2 examples This example package is meant to explore the possibilities of ROS2 from the point of view of current ROS1 features and how the ROS1 feat

Multi-robot Systems (MRS) group at Czech Technical University in Prague 45 Jul 23, 2022
T-Watch 2020 v1 compatible firmware providing WiFi and BLE testing tools (and also, a watch :D)

ESP-IDF template app This is a template application to be used with Espressif IoT Development Framework. Please check ESP-IDF docs for getting started

Damien Cauquil 39 Jul 31, 2022
Triton Python and C++ client libraries and example, and client examples for go, java and scala.

Triton Client Libraries and Examples To simplify communication with Triton, the Triton project provides several client libraries and examples of how t

Triton Inference Server 164 Aug 7, 2022
C++ framework for building lightweight HTTP interfaces

Pion Network Library C++ framework for building lightweight HTTP interfaces Project Home: https://github.com/rimmartin/pion-ng Documentation Retrievin

null 1 Dec 30, 2020
Building a personal webserver/framework piece by piece

Building a personal webserver/framework piece by piece

E 1 May 11, 2022
A very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Boost.Asio.

A very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Boost.Asio. Created to be an easy way to make REST resources available from C++ applications.

Ole Christian Eidheim 2.3k Aug 12, 2022
Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and 10K connections problem solution

CppServer Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and

Ivan Shynkarenka 867 Aug 8, 2022
Simple server and client using python socket and declarative programming

Socket-programming Simple server and client using python socket and declarative programming How to use? open cmd and navigate to the location of the s

MAINAK CHAUDHURI 21 Sep 30, 2021