Browse Source

兼容最新的asio

3.0.0
tearshark 2 years ago
parent
commit
86b4150df3
3 changed files with 14 additions and 14 deletions
  1. 1
    1
      CMakeLists.txt
  2. 4
    2
      benchmark/CMakeLists.txt
  3. 9
    11
      benchmark/benchmark_asio_echo.cpp

+ 1
- 1
CMakeLists.txt View File

${ALL_TUTORIAL_FILES}) ${ALL_TUTORIAL_FILES})
target_link_libraries(test_librf PUBLIC librf) target_link_libraries(test_librf PUBLIC librf)
add_subdirectory(benchmark)
#add_subdirectory(benchmark)
endif() endif()

+ 4
- 2
benchmark/CMakeLists.txt View File

set(BENCHMARK_FILES "") set(BENCHMARK_FILES "")
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} BENCHMARK_FILES) aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} BENCHMARK_FILES)


find_package(asio REQUIRED)

foreach(BENCHMARK_FILE_PATH ${BENCHMARK_FILES}) foreach(BENCHMARK_FILE_PATH ${BENCHMARK_FILES})
string(REGEX REPLACE ".+[/\]([^/\.]+)\\.cpp" "\\1" BENCHMARK_FILE_NAME ${BENCHMARK_FILE_PATH}) string(REGEX REPLACE ".+[/\]([^/\.]+)\\.cpp" "\\1" BENCHMARK_FILE_NAME ${BENCHMARK_FILE_PATH})
message(STATUS "Generating benchmark target: ${BENCHMARK_FILE_NAME}") message(STATUS "Generating benchmark target: ${BENCHMARK_FILE_NAME}")


add_executable(${BENCHMARK_FILE_NAME} ${BENCHMARK_FILE_PATH}) add_executable(${BENCHMARK_FILE_NAME} ${BENCHMARK_FILE_PATH})
target_link_libraries(${BENCHMARK_FILE_NAME} PUBLIC librf)
target_link_libraries(${BENCHMARK_FILE_NAME} PUBLIC librf asio asio::asio)
target_compile_definitions(${BENCHMARK_FILE_NAME} target_compile_definitions(${BENCHMARK_FILE_NAME}
PRIVATE LIBRF_TUTORIAL_STAND_ALONE=1
PRIVATE LIBRF_TUTORIAL_STAND_ALONE=1 ASIO_STANDALONE
) )
endforeach(BENCHMARK_FILE_PATH) endforeach(BENCHMARK_FILE_PATH)

+ 9
- 11
benchmark/benchmark_asio_echo.cpp View File

#pragma warning(disable : 4834) #pragma warning(disable : 4834)
using namespace asio;
using namespace asio::ip; using namespace asio::ip;
using namespace librf; using namespace librf;
template<class _Ty, size_t _Size> template<class _Ty, size_t _Size>
try try
{ {
bytes_transferred += co_await socket.async_read_some( bytes_transferred += co_await socket.async_read_some(
asio::buffer(buffer.data() + bytes_transferred, buffer.size() - bytes_transferred), rf_task);
asio::buffer(buffer.data() + bytes_transferred, buffer.size() - bytes_transferred), asio::rf_task);
if (bytes_transferred >= buffer.size()) if (bytes_transferred >= buffer.size())
{ {
co_await asio::async_write(socket, asio::buffer(buffer, buffer.size()), rf_task);
co_await asio::async_write(socket, asio::buffer(buffer, buffer.size()), asio::rf_task);
bytes_transferred = 0; bytes_transferred = 0;
g_echo_count.fetch_add(1, std::memory_order_release); g_echo_count.fetch_add(1, std::memory_order_release);
{ {
try try
{ {
co_await acceptor.async_accept(socketes.c[idx], rf_task);
co_await acceptor.async_accept(socketes.c[idx], asio::rf_task);
go RunEchoSession(std::move(socketes.c[idx])); go RunEchoSession(std::move(socketes.c[idx]));
} }
catch (std::exception & e) catch (std::exception & e)
try try
{ {
co_await asio::async_connect(*sptr, ep, rf_task);
co_await asio::async_connect(*sptr, ep, asio::rf_task);
GO GO
{ {
{ {
for (;;) for (;;)
{ {
co_await asio::async_write(*sptr, asio::buffer(write_buff_), rf_task);
co_await asio::async_write(*sptr, asio::buffer(write_buff_), asio::rf_task);
} }
} }
catch (std::exception & e) catch (std::exception & e)
std::array<char, BUF_SIZE> read_buff_; std::array<char, BUF_SIZE> read_buff_;
for (;;) for (;;)
{ {
co_await sptr->async_read_some(asio::buffer(read_buff_), rf_task);
co_await sptr->async_read_some(asio::buffer(read_buff_), asio::rf_task);
} }
} }
catch (std::exception & e) catch (std::exception & e)
try try
{ {
co_await asio::async_connect(socket_, ep, rf_task);
co_await asio::async_connect(socket_, ep, asio::rf_task);
for (auto & c : write_buff_) for (auto & c : write_buff_)
c = 'A' + rand() % 52; c = 'A' + rand() % 52;
for (;;) for (;;)
{ {
co_await when_all( co_await when_all(
asio::async_write(socket_, asio::buffer(write_buff_), rf_task),
socket_.async_read_some(asio::buffer(read_buff_), rf_task)
asio::async_write(socket_, asio::buffer(write_buff_), asio::rf_task),
socket_.async_read_some(asio::buffer(read_buff_), asio::rf_task)
); );
} }
} }

Loading…
Cancel
Save