加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

从零实现一个Http处事器

发布时间:2019-04-18 03:35:36 所属栏目:业界 来源:高性能服务器开发
导读:我始终认为,生成的身世很重要,但后天的全力越发重要,以是现在的许多科班每每不如后天全力的非科班。以是,我们必要从头给专业和专家下一个界说:所谓专业,就是别人不搞你搞,这就是你的专业;你和别人同时搞,你比别人搞的好,就是专家。 说到http协议

代码注释都写的很清晰,我们先操作rn支解获得每一行,个中第一行的数据是:

  1. GET /register.do?p={%22username%22:%20%2213917043329%22,%20%22nickname%22:%20%22balloon%22,%20%22password%22:%20%22123%22} HTTP/1.1 

个中%22是双引号的url转码情势,%20是空格的url转码情势,然后我们按照空格分成三段,个中第二段就是我们的网址和参数:

  1. /register.do?p={%22username%22:%20%2213917043329%22,%20%22nickname%22:%20%22balloon%22,%20%22password%22:%20%22123%22} 

然后我们按照网址与参数之间的问号将这个分成两段:第一段是网址,第二段是参数:

  1. 1bool HttpSession::Process(const std::shared_ptr<TcpConnection>& conn, const std::string& url, const std::string& param) 
  2.  2{ 
  3.  3    if (url.empty()) 
  4.  4        return false; 
  5.  5 
  6.  6    if (url == "/register.do") 
  7.  7    { 
  8.  8        OnRegisterResponse(param, conn); 
  9.  9    } 
  10. 10    else if (url == "/login.do") 
  11. 11    { 
  12. 12        OnLoginResponse(param, conn); 
  13. 13    } 
  14. 14    else if (url == "/getfriendlist.do") 
  15. 15    { 
  16. 16 
  17. 17    } 
  18. 18    else if (url == "/getgroupmembers.do") 
  19. 19    { 
  20. 20 
  21. 21    } 
  22. 22    else 
  23. 23        return false; 
  24. 24 
  25. 25 
  26. 26    return true; 
  27. 27} 

然后我们按照url匹配网址,假如是注册哀求,会走注册处理赏罚逻辑:

  1. void HttpSession::OnRegisterResponse(const std::string& data, const std::shared_ptr<TcpConnection>& conn) 
  2.  2{ 
  3.  3    string retData; 
  4.  4    string decodeData; 
  5.  5    URLEncodeUtil::Decode(data, decodeData); 
  6.  6    BussinessLogic::RegisterUser(decodeData, conn, false, retData); 
  7.  7    if (!retData.empty()) 
  8.  8    { 
  9.  9        std::string response; 
  10. 10        URLEncodeUtil::Encode(retData, response); 
  11. 11        MakeupResponse(retData, response); 
  12. 12        conn->send(response); 
  13. 13 
  14. 14        LOG_INFO << "Response to client: cmd=msg_type_register" << ", data=" << retData << conn->peerAddress().toIpPort();; 
  15. 15    } 
  16. 16} 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读