Dieses Repository enthält die plattformübergreifende C ++-TUBUS-Bibliothek, die ein auf UDP basierendes Streaming-Transportprotokoll implementiert. Das Protokoll wurde ursprünglich als Teil des Wurmloch -Dienstprogramms entwickelt. Es kann in Fällen verwendet werden, in denen die Verwendung von TCP beispielsweise für Anwendungen, die über NAT ausgeführt werden, schwierig ist. Um die Verbindungssicherheit zu erhöhen, können tubus -Pakete optional durch einen vorgefertigten Schlüssel verschleiert werden.
Um Anwendungen zu entwickeln, die auf boost::asio basieren, werden der ASIO-ähnliche Primitive tubus::socket und tubus::acceptor angeboten. Der tubus::socket Primitive implementiert Asyncreadstream- , AsyncWritestream- , Stream- , Syncreadstream- und SyncWritESTREAM -Konzepte, sodass er als untere Schicht des boost::asio::ssl::stream verwendet werden kann.
TUBUS сhannel -Schnittstelle.
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 );
} Datenverbraucher mit tubus::channel implementiert.
# 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 ();
};
}); Datenerzeuger mit tubus::socket implementiert.
# 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 mit tubus::acceptor (nur Linux ) implementiert.
# 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(); Verschlüsselter Stream mit boost::asio::ssl::stream und tubus::socket implementiert.
# 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();Sie können Präbuild -Pakete für Debian- und Windows -Plattformen herunterladen.
Die Bibliothek hängt vom boost ab. Um Tests zu erstellen, ist die openssl erforderlich.
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 -Importvariablen.
Melden Sie Fehler und schlagen Sie Verbesserungen vor.
TUBUS ist unter der Apache-Lizenz 2.0 lizenziert, was bedeutet, dass Sie es frei haben, sie für kommerzielle und nichtkommerzielle Zwecke zu erhalten und zu verwenden, solange Sie seine Bedingungen erfüllen. Weitere Informationen finden Sie in der Datei lizenz.txt.
Copyright © 2023 Novemus Band. Alle Rechte vorbehalten.