на то же самое Время 10K -одновременные клиенты устанавливают подключения к серверу.
Сервер записывает 1KB -куски данных каждому клиенту в цикле. устанавливаются, спят в течение некоторого времени, чтобы позволить серверу/клиентам обмениваться данными. , который завершает соединение для клиентов.
Однако всегда есть некоторые соединения, которые не будут закрыты.
Код: Выделить всё
using asio::ip::tcp;
using Executor = asio::io_context::executor_type;
std::atomic_bool stop = false;
std::atomic_int32_t connected = 0;
int numConnections = 10'000;
namespace Client {
asio::awaitable client() try {
const auto ex = co_await asio::this_coro::executor;
tcp::socket socket{ex};
tcp::resolver res{ex};
co_await async_connect(socket, res.resolve("localhost", "12345"), asio::deferred);
++connected;
for (std::vector buf(1024);;)
co_await async_read(socket, asio::mutable_buffer(buf.data(), buf.size()), asio::deferred);
} catch (asio::system_error const &se) {
--connected;
}
}
< /code>
namespace Server {
asio::awaitable session(tcp::socket socket) try {
for (static const std::vector payload(1024, 'A'); !stop;) {
co_await async_write(socket, asio::buffer(payload),
asio::as_tuple(asio::deferred));
}
} catch (asio::system_error &err) {
log()
Подробнее здесь: [url]https://stackoverflow.com/questions/79451578/deadlock-in-local-client-server-environment-with-10k-concurrent-tcp-connections[/url]