Skip to content

Commit

Permalink
复用 Message.response,修改 httpHandler,每个请求单独创建对象
Browse files Browse the repository at this point in the history
  • Loading branch information
xicilion committed Mar 11, 2017
1 parent 0ef6ef4 commit 232657c
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 35 deletions.
1 change: 0 additions & 1 deletion fibjs/include/HttpRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,6 @@ class HttpRequest: public HttpRequest_base
exlib::string m_method;
exlib::string m_address;
exlib::string m_queryString;
obj_ptr<HttpResponse_base> m_response;
obj_ptr<HttpCollection_base> m_cookies;
obj_ptr<HttpCollection_base> m_query;
obj_ptr<HttpCollection_base> m_form;
Expand Down
4 changes: 3 additions & 1 deletion fibjs/include/Message.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,14 @@ class Message: public Message_base
return m_body;
}

public:
obj_ptr<Message_base> m_response;

private:
obj_ptr<List_base> m_params;
VariantEx m_result;
exlib::string m_value;
obj_ptr<SeekableStream_base> m_body;
obj_ptr<Message_base> m_response;
exlib::string m_lastError;
bool m_bRep;
};
Expand Down
3 changes: 1 addition & 2 deletions fibjs/include/WebSocketMessage.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class WebSocketMessage: public WebSocketMessage_base
WebSocketMessage(int32_t type, bool masked, int32_t maxSize, bool bRep = false)
: m_type(type), m_masked(masked), m_maxSize(maxSize), m_error(0), m_bRep(bRep)
{
m_message = new Message();
m_message = new Message(m_bRep);
}

public:
Expand Down Expand Up @@ -67,7 +67,6 @@ class WebSocketMessage: public WebSocketMessage_base

private:
obj_ptr<Message> m_message;
obj_ptr<WebSocketMessage_base> m_response;
bool m_bRep;
};

Expand Down
39 changes: 24 additions & 15 deletions fibjs/src/http/HttpHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,29 +75,30 @@ result_t HttpHandler::invoke(object_base *v, obj_ptr<Handler_base> &retVal,
m_stmBuffered = new BufferedStream(stm);
m_stmBuffered->set_EOL("\r\n");

m_req = new HttpRequest();

obj_ptr<Message_base> m;
m_req->get_response(m);
m_rep = (HttpResponse_base *)(Message_base *)m;

m_req->set_maxHeadersCount(pThis->m_maxHeadersCount);
m_req->set_maxUploadSize(pThis->m_maxUploadSize);

set(read);
}

static int32_t read(AsyncState *pState, int32_t n)
{
asyncInvoke *pThis = (asyncInvoke *) pState;
bool bKeepAlive = false;

pThis->m_rep->get_keepAlive(bKeepAlive);
if (!bKeepAlive)
return pThis->done(CALL_RETURN_NULL);
if (pThis->m_rep)
{
bool bKeepAlive = false;

pThis->m_zip.Release();
pThis->m_body.Release();
pThis->m_rep->get_keepAlive(bKeepAlive);
if (!bKeepAlive)
return pThis->done(CALL_RETURN_NULL);

pThis->m_rep.Release();
pThis->m_zip.Release();
pThis->m_body.Release();
}

pThis->m_req = new HttpRequest();

pThis->m_req->set_maxHeadersCount(pThis->m_pThis->m_maxHeadersCount);
pThis->m_req->set_maxUploadSize(pThis->m_pThis->m_maxUploadSize);

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

obj_ptr<Message_base> m;
pThis->m_req->get_response(m);
pThis->m_rep = (HttpResponse_base *)(Message_base *)m;

exlib::string str;

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

obj_ptr<Message_base> m;
m_req->get_response(m);
m_rep = (HttpResponse_base *)(Message_base *)m;

m_rep->set_keepAlive(false);
m_rep->set_status(400);
set(check_error);
Expand Down
10 changes: 3 additions & 7 deletions fibjs/src/http/HttpRequest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -193,9 +193,6 @@ result_t HttpRequest::clear()
m_address.assign("/", 1);
m_queryString.clear();

if (m_response)
m_response->clear();

m_cookies.Release();
m_query.Release();
m_form.Release();
Expand Down Expand Up @@ -352,11 +349,10 @@ result_t HttpRequest::set_queryString(exlib::string newVal)

result_t HttpRequest::get_response(obj_ptr<Message_base> &retVal)
{
if (!m_response)
m_response = new HttpResponse();
if (!m_message->m_response)
m_message->m_response = new HttpResponse();

retVal = m_response;
return 0;
return m_message->get_response(retVal);
}

result_t HttpRequest::get_cookies(obj_ptr<HttpCollection_base> &retVal)
Expand Down
1 change: 1 addition & 0 deletions fibjs/src/mq/Message.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ result_t Message::clear()
m_result.clear();
m_value.clear();
m_body.Release();
m_response.Release();

return 0;
}
Expand Down
13 changes: 4 additions & 9 deletions fibjs/src/websocket/WebSocketMessage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,11 +95,7 @@ result_t WebSocketMessage::set_lastError(exlib::string newVal)

result_t WebSocketMessage::clear()
{
m_message = new Message();

if (m_response)
m_response->clear();

m_message = new Message(m_bRep);
return 0;
}

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

if (!m_response)
if (!m_message->m_response)
{
int32_t type = m_type;
if (type == ws_base::_PING)
type = ws_base::_PONG;
m_response = new WebSocketMessage(type, false, m_maxSize, true);
m_message->m_response = new WebSocketMessage(type, false, m_maxSize, true);
}

retVal = m_response;
return 0;
return m_message->get_response(retVal);
}

result_t WebSocketMessage::get_type(int32_t &retVal)
Expand Down

0 comments on commit 232657c

Please sign in to comment.