簡體   English   中英

iostream like.networking in C++?

[英]iostream like networking in C++?

是否可以在 C++ 中執行 stream like.networking?

就像是:

sstream<"www.google.com"> google;
sstream<socket_data> data;
google << "hello";//send hello
google >> data;//read response
if(data.size() > 0)//ok
{
    //manipulate data
}

如果是,如何?

我找不到有關此主題的任何信息。

我寫了 crossplatform.network 你可以在這里找到源代碼: https://bitbucket.org/ptroen/crossplatfor.network/src/master/ (它建立在 boost::asio 之上)

該庫在獲得高性能的同時相當多地概括了 a.network 協議。 例如,這將是一個 http 客戶端(從https://bitbucket.org/ptroen/crossplatfor.network/src/master/OSI/Application/Stub/HTTPClient/main.cc中提取)OSI::Transport::Interface:: IClientTransportInitializationParameters 初始化參數; init_parameters.ParseServerArgs(&(*argv), argc, 80, 80);

OSI::Transport::HTTP::HTTPClientTransport<SampleProtocol::IncomingPayload<OSI::Transport::Interface::IClientTransportInitializationParameters>, SampleProtocol::OutgoingPayload<OSI::Transport::Interface::IClientTransportInitializationParameters>, SampleProtocol::SampleProtocolClientSession<OSI::Transport::Interface::IClientTransportInitializationParameters>, OSI::Transport::Interface::IClientTransportInitializationParameters> client(init_parameters);
SampleProtocol::IncomingPayload< OSI::Transport::Interface::IClientTransportInitializationParameters> request(init_parameters);
client.RunClient((char*)init_parameters.ipAddress.c_str(), request);

其中 SampleProtocol 只是一個 class,帶有由模板調用的方法(請參閱 size()、max_size()、ToString() 和 FromString(),但如果你趕時間,你可能只將它用作你的有效負載。

通過一些工作,您可以使用類似接口的 sstream 包裝它以實現 .network iostream 效果,如果您需要提取器,甚至可以在內部將其傳遞給 sstream。例如,這里有一個關於如何從 std::ostream https://horstmann派生的參考.com/cpp/iostreams.html (它用於不同的用例,但是很好的參考讀物)。

要使 a.network stream 庫成為您需要做的食譜,請執行以下操作:

  1. 制作一個類似 class 的 sstream 重載提取運算符以傳入字符串,反之亦然。
  2. 在構造函數中生成一個新線程(通過 std::thread)來調用上面的 .networking 代碼
  3. 在示例協議(見上文)中添加 std::atomic 或 tostring 內的互斥鎖,並從 string 將異步消息傳回主線程。 基本上,當您需要一種機制將負載准備好傳回主線程時,您的 iostream 包裝器可以在主線程上獲取它。 或者你可以做阻塞( https://www.tutorialspoint.com/what-is-blocking.networks-and-non-blocking.networks-in-computer-architecture )實現,它不需要線程但然后你的.networking性能會更差(因為你的阻塞)。

如果你想阻止,你可以在命令行上使用 invoke curl(參見這里https://linuxize.com/post/curl-command-examples/ if windows install cgywin),這樣就不需要單獨的線程了。 在調用 curl 之后,采用 stream,解析命令行響應並將其傳遞回字符串並插入到你的 iostream class 中。這種 curl 方法的另一個缺點是你基本上必須實現一個 http 客戶端解析器。

祝你今天過得愉快:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM