mirror of
https://github.com/XRPLF/clio.git
synced 2026-08-22 05:00:52 +00:00
fix: Add queue size limit for websocket (#1701)
For slow clients, we will disconnect with it if the message queue is too long. --------- Co-authored-by: Sergey Kuznetsov <skuznetsov@ripple.com>
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
|
||||
#include <chrono>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
@@ -59,6 +60,7 @@ class SslHttpSession : public impl::HttpBase<SslHttpSession, HandlerType>,
|
||||
public std::enable_shared_from_this<SslHttpSession<HandlerType>> {
|
||||
boost::beast::ssl_stream<boost::beast::tcp_stream> stream_;
|
||||
std::reference_wrapper<util::TagDecoratorFactory const> tagFactory_;
|
||||
std::uint32_t maxWsSendingQueueSize_;
|
||||
|
||||
public:
|
||||
/**
|
||||
@@ -72,6 +74,7 @@ public:
|
||||
* @param dosGuard The denial of service guard to use
|
||||
* @param handler The server handler to use
|
||||
* @param buffer Buffer with initial data received from the peer
|
||||
* @param maxWsSendingQueueSize The maximum size of the sending queue for websocket
|
||||
*/
|
||||
explicit SslHttpSession(
|
||||
tcp::socket&& socket,
|
||||
@@ -81,7 +84,8 @@ public:
|
||||
std::reference_wrapper<util::TagDecoratorFactory const> tagFactory,
|
||||
std::reference_wrapper<dosguard::DOSGuardInterface> dosGuard,
|
||||
std::shared_ptr<HandlerType> const& handler,
|
||||
boost::beast::flat_buffer buffer
|
||||
boost::beast::flat_buffer buffer,
|
||||
std::uint32_t maxWsSendingQueueSize
|
||||
)
|
||||
: impl::HttpBase<SslHttpSession, HandlerType>(
|
||||
ip,
|
||||
@@ -93,6 +97,7 @@ public:
|
||||
)
|
||||
, stream_(std::move(socket), ctx)
|
||||
, tagFactory_(tagFactory)
|
||||
, maxWsSendingQueueSize_(maxWsSendingQueueSize)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -173,7 +178,8 @@ public:
|
||||
this->handler_,
|
||||
std::move(this->buffer_),
|
||||
std::move(this->req_),
|
||||
ConnectionBase::isAdmin()
|
||||
ConnectionBase::isAdmin(),
|
||||
maxWsSendingQueueSize_
|
||||
)
|
||||
->run();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user