Skip to content

Commit 232657c

Browse files
committed
复用 Message.response,修改 httpHandler,每个请求单独创建对象
1 parent 0ef6ef4 commit 232657c

File tree

7 files changed

+36
-35
lines changed

7 files changed

+36
-35
lines changed

fibjs/include/HttpRequest.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ class HttpRequest: public HttpRequest_base
9898
exlib::string m_method;
9999
exlib::string m_address;
100100
exlib::string m_queryString;
101-
obj_ptr<HttpResponse_base> m_response;
102101
obj_ptr<HttpCollection_base> m_cookies;
103102
obj_ptr<HttpCollection_base> m_query;
104103
obj_ptr<HttpCollection_base> m_form;

fibjs/include/Message.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,14 @@ class Message: public Message_base
5050
return m_body;
5151
}
5252

53+
public:
54+
obj_ptr<Message_base> m_response;
55+
5356
private:
5457
obj_ptr<List_base> m_params;
5558
VariantEx m_result;
5659
exlib::string m_value;
5760
obj_ptr<SeekableStream_base> m_body;
58-
obj_ptr<Message_base> m_response;
5961
exlib::string m_lastError;
6062
bool m_bRep;
6163
};

fibjs/include/WebSocketMessage.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class WebSocketMessage: public WebSocketMessage_base
2020
WebSocketMessage(int32_t type, bool masked, int32_t maxSize, bool bRep = false)
2121
: m_type(type), m_masked(masked), m_maxSize(maxSize), m_error(0), m_bRep(bRep)
2222
{
23-
m_message = new Message();
23+
m_message = new Message(m_bRep);
2424
}
2525

2626
public:
@@ -67,7 +67,6 @@ class WebSocketMessage: public WebSocketMessage_base
6767

6868
private:
6969
obj_ptr<Message> m_message;
70-
obj_ptr<WebSocketMessage_base> m_response;
7170
bool m_bRep;
7271
};
7372

fibjs/src/http/HttpHandler.cpp

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -75,29 +75,30 @@ result_t HttpHandler::invoke(object_base *v, obj_ptr<Handler_base> &retVal,
7575
m_stmBuffered = new BufferedStream(stm);
7676
m_stmBuffered->set_EOL("\r\n");
7777

78-
m_req = new HttpRequest();
79-
80-
obj_ptr<Message_base> m;
81-
m_req->get_response(m);
82-
m_rep = (HttpResponse_base *)(Message_base *)m;
83-
84-
m_req->set_maxHeadersCount(pThis->m_maxHeadersCount);
85-
m_req->set_maxUploadSize(pThis->m_maxUploadSize);
86-
8778
set(read);
8879
}
8980

9081
static int32_t read(AsyncState *pState, int32_t n)
9182
{
9283
asyncInvoke *pThis = (asyncInvoke *) pState;
93-
bool bKeepAlive = false;
9484

95-
pThis->m_rep->get_keepAlive(bKeepAlive);
96-
if (!bKeepAlive)
97-
return pThis->done(CALL_RETURN_NULL);
85+
if (pThis->m_rep)
86+
{
87+
bool bKeepAlive = false;
9888

99-
pThis->m_zip.Release();
100-
pThis->m_body.Release();
89+
pThis->m_rep->get_keepAlive(bKeepAlive);
90+
if (!bKeepAlive)
91+
return pThis->done(CALL_RETURN_NULL);
92+
93+
pThis->m_rep.Release();
94+
pThis->m_zip.Release();
95+
pThis->m_body.Release();
96+
}
97+
98+
pThis->m_req = new HttpRequest();
99+
100+
pThis->m_req->set_maxHeadersCount(pThis->m_pThis->m_maxHeadersCount);
101+
pThis->m_req->set_maxUploadSize(pThis->m_pThis->m_maxUploadSize);
101102

102103
pThis->set(invoke);
103104
return pThis->m_req->readFrom(pThis->m_stmBuffered, pThis);
@@ -114,6 +115,10 @@ result_t HttpHandler::invoke(object_base *v, obj_ptr<Handler_base> &retVal,
114115
pThis->m_pThis->m_stats->inc(HTTP_REQUEST);
115116
pThis->m_pThis->m_stats->inc(HTTP_PENDDING);
116117

118+
obj_ptr<Message_base> m;
119+
pThis->m_req->get_response(m);
120+
pThis->m_rep = (HttpResponse_base *)(Message_base *)m;
121+
117122
exlib::string str;
118123

119124
pThis->m_req->get_protocol(str);
@@ -364,6 +369,10 @@ result_t HttpHandler::invoke(object_base *v, obj_ptr<Handler_base> &retVal,
364369
m_pThis->m_stats->inc(HTTP_REQUEST);
365370
m_pThis->m_stats->inc(HTTP_PENDDING);
366371

372+
obj_ptr<Message_base> m;
373+
m_req->get_response(m);
374+
m_rep = (HttpResponse_base *)(Message_base *)m;
375+
367376
m_rep->set_keepAlive(false);
368377
m_rep->set_status(400);
369378
set(check_error);

fibjs/src/http/HttpRequest.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,6 @@ result_t HttpRequest::clear()
193193
m_address.assign("/", 1);
194194
m_queryString.clear();
195195

196-
if (m_response)
197-
m_response->clear();
198-
199196
m_cookies.Release();
200197
m_query.Release();
201198
m_form.Release();
@@ -352,11 +349,10 @@ result_t HttpRequest::set_queryString(exlib::string newVal)
352349

353350
result_t HttpRequest::get_response(obj_ptr<Message_base> &retVal)
354351
{
355-
if (!m_response)
356-
m_response = new HttpResponse();
352+
if (!m_message->m_response)
353+
m_message->m_response = new HttpResponse();
357354

358-
retVal = m_response;
359-
return 0;
355+
return m_message->get_response(retVal);
360356
}
361357

362358
result_t HttpRequest::get_cookies(obj_ptr<HttpCollection_base> &retVal)

fibjs/src/mq/Message.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ result_t Message::clear()
117117
m_result.clear();
118118
m_value.clear();
119119
m_body.Release();
120+
m_response.Release();
120121

121122
return 0;
122123
}

fibjs/src/websocket/WebSocketMessage.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,7 @@ result_t WebSocketMessage::set_lastError(exlib::string newVal)
9595

9696
result_t WebSocketMessage::clear()
9797
{
98-
m_message = new Message();
99-
100-
if (m_response)
101-
m_response->clear();
102-
98+
m_message = new Message(m_bRep);
10399
return 0;
104100
}
105101

@@ -489,16 +485,15 @@ result_t WebSocketMessage::get_response(obj_ptr<Message_base> &retVal)
489485
if (m_bRep)
490486
return CHECK_ERROR(CALL_E_INVALID_CALL);
491487

492-
if (!m_response)
488+
if (!m_message->m_response)
493489
{
494490
int32_t type = m_type;
495491
if (type == ws_base::_PING)
496492
type = ws_base::_PONG;
497-
m_response = new WebSocketMessage(type, false, m_maxSize, true);
493+
m_message->m_response = new WebSocketMessage(type, false, m_maxSize, true);
498494
}
499495

500-
retVal = m_response;
501-
return 0;
496+
return m_message->get_response(retVal);
502497
}
503498

504499
result_t WebSocketMessage::get_type(int32_t &retVal)

0 commit comments

Comments
 (0)