发送响应
提示
hyperlane 框架提供了多种响应发送方法,支持完整 HTTP 响应发送、仅响应体发送,以及连接管理。
try_send和send: 发送完整 HTTP 响应并保留连接。try_send_body和send_body: 仅发送响应体并保留连接。try_send_body_with_data和send_body_with_data: 发送指定数据的响应体。try_send_body_list和send_body_list: 批量发送响应体。try_flush和flush: 刷新网络缓冲区。
发送完整 HTTP 响应
try_send 方法
提示
发送完整的 HTTP 响应,发送后 TCP 连接保留。返回 Result 类型,可以进行错误处理。
let send_result: Result<(), ResponseError> = ctx.try_send().await;send 方法
提示
发送完整的 HTTP 响应,发送后 TCP 连接保留。失败时会 panic。
ctx.send().await;发送响应体
try_send_body 方法
提示
仅发送响应体内容,发送后 TCP 连接保留。适用于流式响应和 WebSocket。返回 Result 类型,可以进行错误处理。
let send_result: Result<(), ResponseError> = ctx.try_send_body().await;send_body 方法
提示
仅发送响应体内容,发送后 TCP 连接保留。适用于流式响应和 WebSocket。失败时会 panic。
ctx.send_body().await;发送带数据的响应
try_send_body_with_data 方法
提示
仅发送响应体内容,并将提供的数据作为响应体,发送后 TCP 连接保留。返回 Result 类型,可以进行错误处理。
let send_result: Result<(), ResponseError> = ctx.try_send_body_with_data("chunk data").await;send_body_with_data 方法
提示
仅发送响应体内容,并将提供的数据作为响应体,发送后 TCP 连接保留。失败时会 panic。
ctx.send_body_with_data("chunk data").await;try_send_body_list_with_data 方法
提示
批量发送多个响应体数据,适用于 WebSocket 桢列表等场景,发送后 TCP 连接保留。返回 Result 类型,可以进行错误处理。
let frame_list: Vec<ResponseBody> = WebSocketFrame::create_frame_list(&request_body);
let send_result: Result<(), ResponseError> = ctx.try_send_body_list_with_data(&frame_list).await;send_body_list_with_data 方法
提示
批量发送多个响应体数据,适用于 WebSocket 桢列表等场景,发送后 TCP 连接保留。失败时会 panic。
let frame_list: Vec<ResponseBody> = WebSocketFrame::create_frame_list(&request_body);
ctx.send_body_list_with_data(&frame_list).await;批量发送响应
try_send_body_list 方法
提示
批量发送多个响应体数据,适用于 WebSocket 桢列表等场景,发送后 TCP 连接保留。返回 Result 类型,可以进行错误处理。
let frame_list: Vec<ResponseBody> = WebSocketFrame::create_frame_list(&request_body);
let send_result: Result<(), ResponseError> = ctx.try_send_body_list(&frame_list).await;send_body_list 方法
提示
批量发送多个响应体数据,适用于 WebSocket 桢列表等场景,发送后 TCP 连接保留。失败时会 panic。
let frame_list: Vec<ResponseBody> = WebSocketFrame::create_frame_list(&request_body);
ctx.send_body_list(&frame_list).await;刷新缓冲区
try_flush 方法
提示
强制刷新网络缓冲区,确保数据立即发送。返回 Result 类型,可以进行错误处理。
let flush_result: Result<(), ResponseError> = ctx.try_flush().await;flush 方法
提示
强制刷新网络缓冲区,确保数据立即发送。失败时会 panic。
ctx.flush().await;基本使用示例
使用框架常量
ctx.set_response_header(CONTENT_TYPE, APPLICATION_JSON).await
.set_response_body(r#"{"status": "ok"}"#).await
.send().await;流式发送
let _ = ctx
.set_response_header(CONTENT_TYPE, TEXT_EVENT_STREAM)
.await
.send()
.await;
for i in 1..10 {
let _ = ctx.set_response_body(format!("chunk {}\n", i)).await.send_body().await;
}
ctx.flush().await;WebSocket 发送
struct WebsocketRoute;
impl ServerHook for WebsocketRoute {
async fn new(_ctx: &Context) -> Self {
Self
}
async fn handle(self, ctx: &Context) {
while ctx.ws_from_stream(4096).await.is_ok() {
let request_body: Vec<u8> = ctx.get_request_body().await;
ctx.set_response_body(&request_body).await;
self.send_body_hook(ctx).await;
}
}
}
impl WebsocketRoute {
async fn send_body_hook(&self, ctx: &Context) {
let body: ResponseBody = ctx.get_response_body().await;
if ctx.get_request().await.is_ws() {
let frame_list: Vec<ResponseBody> = WebSocketFrame::create_frame_list(&body);
ctx.send_body_list_with_data(&frame_list).await;
} else {
ctx.send_body().await;
}
}
}