Proxygen alternatives and similar libraries
Based on the "Networking" category.
Alternatively, view Proxygen alternatives based on common mentions on social networks and blogs.
-
libcurl
A command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features -
POCO
The POCO C++ Libraries are powerful cross-platform C++ libraries for building network- and internet-based applications that run on desktop, server, mobile, IoT, and embedded systems. -
C++ REST SDK
The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services. -
RakNet
DISCONTINUED. RakNet is a cross platform, open source, C++ networking engine for game programmers. -
evpp
A modern C++ network library for developing high performance network services in TCP/UDP/HTTP protocols. -
Simple-Web-Server
DISCONTINUED. 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. -
wdt
DISCONTINUED. Warp speed Data Transfer (WDT) is an embeddedable library (and command line tool) aiming to transfer data between 2 systems as fast as possible over multiple TCP paths. -
PcapPlusPlus
PcapPlusPlus is a multiplatform C++ library for capturing, parsing and crafting of network packets. It is designed to be efficient, powerful and easy to use. It provides C++ wrappers for the most popular packet processing engines such as libpcap, Npcap, WinPcap, DPDK, AF_XDP and PF_RING. -
cpp-netlib
The C++ Network Library Project -- cross-platform, standards compliant networking library. -
Restbed
Corvusoft's Restbed framework brings asynchronous RESTful functionality to C++14 applications. -
Silicon
A high performance, middleware oriented C++14 http web framework please use matt-42/lithium instead -
Simple-WebSocket-Server
DISCONTINUED. A very simple, fast, multithreaded, platform independent WebSocket (WS) and WebSocket Secure (WSS) server and client library implemented using C++11, Boost.Asio and OpenSSL. Created to be an easy way to make WebSocket endpoints in C++. -
RESTinio
Cross-platform, efficient, customizable, and robust asynchronous HTTP(S)/WebSocket server C++ library with the right balance between performance and ease of use -
nope.c
WAFer is a C language-based software platform for scalable server-side and networking applications. Think node.js for C programmers. -
IXWebSocket
websocket and http client and server library, with TLS support and very few dependencies -
mailio
mailio is a cross platform C++ library for MIME format and SMTP, POP3, IMAP protocols. It is based on the standard C++ 17 and Boost library. -
QuantumGate
QuantumGate is a peer-to-peer (P2P) communications protocol, library and API written in C++. -
NetIF
Header-only C++14 library for getting addresses associated with network interfaces without name lookups on Windows, macOS, Linux, and FreeBSD
SaaSHub - Software Alternatives and Reviews
![SaaSHub Logo SaaSHub Logo](https://cdn-b.libhunt.com/assets/partners/saashub-small-09b040e303cf50000aca670e1c77a15c64fc5c073fbdca2665ec2b8b621efc1a.png)
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Proxygen or a related project?
README
Proxygen: Facebook's C++ HTTP Libraries
This project comprises the core C++ HTTP abstractions used at Facebook. Internally, it is used as the basis for building many HTTP servers, proxies, and clients. This release focuses on the common HTTP abstractions and our simple HTTPServer framework. Future releases will provide simple client APIs as well. The framework supports HTTP/1.1, SPDY/3, SPDY/3.1, HTTP/2, and HTTP/3. The goal is to provide a simple, performant, and modern C++ HTTP library.
We have a Google group for general discussions at https://groups.google.com/d/forum/facebook-proxygen.
The original blog post also has more background on the project.
Learn More in This Intro Video
Installing
Note that currently this project has been tested on Ubuntu 18.04 and Mac OSX although it likely works on many other platforms.
You will need at least 3 GiB of memory to compile proxygen
and its
dependencies.
Easy Install
Just run ./build.sh
from the proxygen/
directory to get and build all
the dependencies and proxygen
. You can run the tests manually with cd _build/ && make test
.
Then run ./install.sh
to install it. You can remove the temporary build directory (_build
) and ./build.sh && ./install.sh
to rebase the dependencies, and then rebuild and reinstall proxygen
.
Other Platforms
If you are running on another platform, you may need to install several
packages first. Proxygen and folly
are all Autotools based projects.
Introduction
Directory structure and contents:
Directory | Purpose |
---|---|
proxygen/external/ |
Contains non-installed 3rd-party code proxygen depends on. |
proxygen/lib/ |
Core networking abstractions. |
proxygen/lib/http/ |
HTTP specific code. (including HTTP/2 and HTTP/3) |
proxygen/lib/services/ |
Connection management and server code. |
proxygen/lib/utils/ |
Miscellaneous helper code. |
proxygen/httpserver/ |
Contains code wrapping proxygen/lib/ for building simple C++ http servers. We recommend building on top of these APIs. |
Architecture
The central abstractions to understand in proxygen/lib
are the session, codec,
transaction, and handler. These are the lowest level abstractions, and we
don't generally recommend building off of these directly.
When bytes are read off the wire, the HTTPCodec
stored inside
HTTPSession
parses these into higher-level objects and associates with
it a transaction identifier. The codec then calls into HTTPSession
which
is responsible for maintaining the mapping between transaction identifier
and HTTPTransaction
objects. Each HTTP request/response pair has a
separate HTTPTransaction
object. Finally, HTTPTransaction
forwards the
call to a handler object which implements HTTPTransaction:: Handler
. The
handler is responsible for implementing business logic for the request or
response.
The handler then calls back into the transaction to generate egress (whether the egress is a request or response). The call flows from the transaction back to the session, which uses the codec to convert the higher-level semantics of the particular call into the appropriate bytes to send on the wire.
The same handler and transaction interfaces are used to both create requests
and handle responses. The API is generic enough to allow
both. HTTPSession
is specialized slightly differently depending on
whether you are using the connection to issue or respond to HTTP
requests.
[Core Proxygen Architecture](CoreProxygenArchitecture.png)
Moving into higher levels of abstraction, proxygen/HTTP server
has a
simpler set of APIs and is the recommended way to interface with proxygen
when acting as a server if you don't need the full control of the lower
level abstractions.
The basic components here are HTTPServer
, RequestHandlerFactory
, and
RequestHandler
. An HTTPServer
takes some configuration and is given a
RequestHandlerFactory
. Once the server is started, the installed
RequestHandlerFactory
spawns a RequestHandler
for each HTTP
request. RequestHandler
is a simple interface users of the library
implement. Subclasses of RequestHandler
should use the inherited
protected member ResponseHandler* downstream_
to send the response.
Using it
Proxygen is a library. After installing it, you can build your C++
server. Try cd
ing to the directory containing the echo server at
proxygen/httpserver/samples/echo/
.
After building proxygen you can start the echo server with _build/proxygen/httpserver/proxygen_echo
and verify it works using curl in a different terminal:
$ curl -v http://localhost:11000/
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 11000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:11000
> Accept: */*
>
< HTTP/1.1 200 OK
< Request-Number: 1
< Date: Thu, 30 Oct 2014 17:07:36 GMT
< Connection: keep-alive
< Content-Length: 0
<
* Connection #0 to host localhost left intact
You can find other samples:
- a simple server that supports HTTP/2 server push (
_build/proxygen/httpserver/proxygen_push
), - a simple server for static files (
_build/proxygen/httpserver/proxygen_static
) - a simple fwdproxy (
_build/proxygen/httpserver/proxygen_proxy
) - a curl-like client (
_build/proxygen/httpclient/samples/curl/proxygen_curl
)
QUIC and HTTP/3
Proxygen supports HTTP/3!
It depends on Facebook's mvfst
library for the IETF QUIC transport
implementation, so we have made that dependency optional. You can build the
HTTP/3 code, tests and sample binaries with ./build.sh --with-quic
.
This will also build a handy command-line utility that can be used as an HTTP/3 server and client.
Sample usage:
_build/proxygen/httpserver/hq --mode=server
_build/proxygen/httpserver/hq --mode=client --path=/
The utility supports the qlog
logging format; just start the server with the --qlogger_path
option and many
knobs to tune both the quic transport and the http layer.
Documentation
We use Doxygen for Proxygen's internal documentation. You can generate a
copy of these docs by running doxygen Doxyfile
from the project
root. You'll want to look at html/namespaceproxygen.html
to start. This
will also generate folly
documentation.
License
See [LICENSE](LICENSE).
Contributing
Contributions to Proxygen are more than welcome. [Read the guidelines in CONTRIBUTING.md](CONTRIBUTING.md). Make sure you've signed the CLA before sending in a pull request.
Whitehat
Facebook has a bounty program for the safe disclosure of security bugs. If you find a vulnerability, please go through the process outlined on that page and do not file a public issue.
*Note that all licence references and agreements mentioned in the Proxygen README section above
are relevant to that project's source code only.