Repositori ini berisi pustaka tubus Cross-Platform C ++, yang mengimplementasikan protokol transportasi streaming berdasarkan UDP . Protokol awalnya dikembangkan sebagai bagian dari utilitas lubang cacing. Ini dapat digunakan dalam kasus -kasus di mana penggunaan TCP sulit, misalnya, untuk aplikasi yang mengalir di atas NAT. Secara opsional, untuk meningkatkan keamanan koneksi, paket tubus dapat dikaburkan oleh kunci yang dibagikan sebelumnya.
Untuk kenyamanan pengembangan aplikasi berdasarkan boost::asio , tubus::socket dan tubus::acceptor ditawarkan. tubus::socket Primitive mengimplementasikan asyncreadstream , asyncwriteStream , stream , syncreadstream dan syncwriteStream konsep, sehingga dapat digunakan sebagai lapisan bawah boost::asio::ssl::stream .
Antarmuka enchannel tubus.
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 );
} Konsumen data diimplementasikan menggunakan 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 ();
};
}); Produsen data diimplementasikan menggunakan 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 ();
};
}); Server diimplementasikan menggunakan tubus::acceptor (hanya 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(); Stream terenkripsi diimplementasikan menggunakan boost::asio::ssl::stream dan 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();Anda dapat mengunduh paket Prebuild untuk platform Debian dan Windows.
Perpustakaan tergantung pada boost . Untuk membangun tes, openssl diperlukan.
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 Variabel Impor CMake .
Laporkan bug dan sarankan perbaikan.
Tubus dilisensikan di bawah Lisensi Apache 2.0, yang berarti Anda bebas untuk mendapatkan dan menggunakannya untuk tujuan komersial dan non-komersial selama Anda memenuhi kondisinya. Lihat file lisensi.txt untuk lebih jelasnya.
Hak Cipta © 2023 Novemus Band. Semua hak dilindungi undang -undang.