tubus
v1.2.1
該存儲庫包含跨平台C ++小管庫,該庫在基於UDP的流傳輸協議中實現了。該協議最初是作為蟲洞實用程序的一部分而開發的。例如,在使用TCP的使用情況下,可以使用它,例如在NAT上運行的應用程序。可選地,為了提高連接安全性,可以通過預共享密鑰混淆tubus數據包。
為了方便開發基於boost::asio的應用程序,提供了類似ASIO的原語tubus::socket and tubus::acceptor 。 tubus::socket原始實施療法,異步流,異步流,流, SyncreadStream和SyncWritestream概念,因此可以用作boost::asio::ssl::stream的下層。
Tubus和ann的接口。
namespace tubus {
...
struct channel
{
virtual ~channel () noexcept ( true ) {}
virtual void close () noexcept ( true ) = 0;
virtual void open ( const endpoint& local) noexcept ( false ) = 0;
virtual void connect ( const endpoint& remote, const callback& handle) noexcept ( true ) = 0;
virtual void accept ( const endpoint& remote, const callback& handle) noexcept ( true ) = 0;
virtual void read ( const mutable_buffer& buffer, const io_callback& handle) noexcept ( true ) = 0;
virtual void write ( const const_buffer& buffer, const io_callback& handle) noexcept ( true ) = 0;
virtual void shutdown ( const callback& handle) noexcept ( true ) = 0;
virtual size_t writable () const noexcept ( true ) = 0;
virtual size_t readable () const noexcept ( true ) = 0;
virtual endpoint host () const noexcept ( false ) = 0;
virtual endpoint peer () const noexcept ( false ) = 0;
};
...
channel_ptr create_channel (boost::asio::io_context& io, uint64_t /* pre-shared key */ secret = 0 ) noexcept ( true );
}使用tubus::channel實施的數據消費者。
# include < tubus/channel.h >
...
auto consumer = tubus::create_channel(io_service, key);
consumer-> open (local_endpoint);
consumer-> connect (remote_endpoint, [&]( const boost::system::error_code& error)
{
...
tubus::mutable_buffer buffer (consumer-> readable ());
// if the buffer is empty, the callback will be called when all previously
// pended read operations are completed and more data can be read
consumer-> read (buffer, [&]( const boost:: system ::error_code& error, size_t size)
{
...
consumer-> shutdown ();
};
});使用tubus::socket實現的數據生產者。
# include < tubus/socket.h >
...
tubus::socket producer (io_service, key);
producer.open(local_endpoint);
producer.async_accept(remote_endpoint, [&]( const boost::system::error_code& error)
{
...
tubus::const_buffer buffer ( " hello, world! " );
producer. async_write_some (buffer, [&]( const boost:: system ::error_code& error, size_t size)
{
...
producer. shutdown ();
};
});使用tubus::acceptor (僅Linux )實現的服務器。
# include < tubus/acceptor.h >
...
tubus::acceptor server (io_service, key);
server.open(local_endpoint);
tubus::socket peer1 (io_service);
server.accept(peer1);
peer1.read_some(...);
peer1.write_some(...);
tubus::socket peer2 (io_service);
server.accept(peer2);
peer2.read_some(...);
peer2.write_some(...);
peer1.shutdown();
peer2.shutdown();
server.close();使用boost::asio::ssl::stream and tubus::socket實現的加密流。
# include < boost/asio/ssl.hpp >
# include < tubus/socket.h >
...
boost::asio::ssl::stream<tubus::socket> client (tubus::socket(io_service, key), ssl_ctx);
client.lowest_layer().open(local_endpoint);
client.lowest_layer().connect(remote_endpoint);
client.handshake(boost::asio::ssl::stream_base::client);
boost::asio::read (client, ...);
boost::asio::write (client, ...);
client.shutdown();您可以下載Debian和Windows平台的Prenuild軟件包。
圖書館取決於boost 。要構建測試,需要openssl 。
cd ~
git clone https://github.com/novemus/tubus.git
cd ~/tubus
cmake -B ./build [-DBOOST_ROOT=...] [-DBUILD_TESTING=ON [-DOPENSSL_ROOT_DIR=...]]
cmake --build ./build --config Release --target tubus_shared tubus_static [tubus_ut]
cmake --build ./build --target install CMake導入變量。
報告錯誤並提出改進。
Tubus是根據Apache許可證2.0獲得許可的,這意味著您可以自由地將其用於商業和非商業目的,只要您履行其條件即可。有關更多詳細信息,請參見許可證文件。
版權所有©2023 Novemus Band。版權所有。