Rename append_message to send_response and update Connection construction docs

This commit is contained in:
2026-07-17 15:11:02 -04:00
parent addef07866
commit 0c0f154390
4 changed files with 16 additions and 14 deletions
+6 -6
View File
@@ -264,7 +264,7 @@ CommitRequest {
1. **Request Processing**: Handler creates request-scoped arena for parsing request data
1. **Response Generation**: Handler uses same arena for response construction (headers, JSON, etc.)
1. **Response Queuing**: Handler calls `conn->append_message()` passing span + arena ownership
1. **Response Queuing**: Handler calls `conn->send_response()` passing span + arena ownership
1. **Response Writing**: I/O thread writes messages to socket, arena freed after completion
> **Note**: Call `conn->reset()` periodically to reclaim arena memory. Best practice is after all outgoing bytes have been written.
@@ -411,7 +411,7 @@ public:
Arena& arena = conn.get_arena();
// Generate response
conn.append_message("HTTP/1.1 200 OK\r\n\r\nHello World");
conn.send_response("HTTP/1.1 200 OK\r\n\r\nHello World");
// Server retains ownership
}
@@ -430,7 +430,7 @@ public:
work_queue.push([weak_conn, data = std::string(data)]() {
// Process asynchronously - connection may be closed
if (auto conn_ref = weak_conn.lock()) {
conn_ref->append_message("Async response");
conn_ref->send_response("Async response");
}
});
}
@@ -483,7 +483,7 @@ class YesHandler : ConnectionHandler {
public:
void on_connection_established(Connection &conn) override {
// Write an initial "y\n"
conn.append_message("y\n");
conn.send_response("y\n");
}
void on_write_progress(Connection &conn) override {
@@ -491,7 +491,7 @@ public:
// Don't use an unbounded amount of memory
conn.reset();
// Write "y\n" repeatedly
conn.append_message("y\n");
conn.send_response("y\n");
}
}
};
@@ -519,7 +519,7 @@ auto weak_conn = conn.get_weak_ref();
background_processor.submit([weak_conn]() {
// Do work...
if (auto conn_ref = weak_conn.lock()) {
conn_ref->append_message("Background result");
conn_ref->send_response("Background result");
}
// Connection automatically cleaned up by server
});
+8 -6
View File
@@ -1,5 +1,6 @@
#pragma once
#include <atomic>
#include <cassert>
#include <cstring>
#include <deque>
@@ -32,7 +33,7 @@ enum class ConnectionShutdown {
/**
* Base interface for sending messages to a connection.
* This restricted interface is safe for use by pipeline threads,
* containing only the append_message method needed for responses.
* containing only the send_response method needed for responses.
* Pipeline threads should use WeakRef<MessageSender> to safely
* send responses without accessing other connection functionality
* that should only be used by the I/O thread.
@@ -76,9 +77,9 @@ struct MessageSender {
*
* Threading model:
* - Single mutex protects state shared with pipeline threads
* - Pipeline threads call Connection methods (append_message, etc.)
* - Pipeline threads call Connection methods (send_response, etc.)
* - I/O thread processes socket events and message queue
* - Pipeline threads register epoll write interest via append_message
* - Pipeline threads register epoll write interest via send_response
* - Connection tracks closed state to prevent EBADF errors
*
* Arena allocator usage:
@@ -165,7 +166,7 @@ struct Connection : MessageSender {
* if (auto conn = weak_conn.lock()) {
* Arena arena;
* auto response = process_request(request_data, arena);
* conn->append_message({&response, 1}, std::move(arena));
* conn->send_response(response_context, response_json, std::move(arena));
* }
* });
* ```
@@ -261,8 +262,9 @@ private:
*
* Creates a new connection with the specified network address, file
* descriptor, and associated handler. Automatically increments the global
* active connection counter and calls the handler's
* on_connection_established() method.
* active connection counter. The caller (Server) is responsible for
* initializing the self weak reference and invoking
* on_connection_established().
*
* @param addr Network address of the remote client (IPv4/IPv6 compatible)
* @param fd File descriptor for the socket connection
+1 -1
View File
@@ -42,7 +42,7 @@ public:
* Implementation should:
* - Create request-scoped Arena for parsing and response generation
* - Parse incoming data using the request arena
* - Use conn.append_message() to queue response data to be sent
* - Use conn.send_response() to queue response data to be sent
* - Handle partial messages and streaming protocols appropriately
* - Use conn.get_weak_ref() for async processing if needed
*
+1 -1
View File
@@ -78,7 +78,7 @@ def check_snake_case_violations(filepath, check_new_only=True):
# Common HTTP parser callback names (external API)
r"\b(onUrl|onHeaderField|onHeaderFieldComplete|onHeaderValue|onHeaderValueComplete|onHeadersComplete|onBody|onMessageComplete)\b",
# Known legacy APIs we can't easily change
r"\b(user_data|get_arena|append_message)\b",
r"\b(user_data|get_arena|send_response)\b",
]
try: