cocos 使用HttpClient
来源:互联网 发布:计算机经典书籍 知乎 编辑:程序博客网 时间:2024/05/16 04:53
HttpClient是HTTP的客户端的接口。封装了各种对象,处理cookies,身份认证,连接管理等。
HttpClient的使用一般包括下面6个步骤:
(1)创建HttpClient实例;
(2)设置某种链接方法的类型(GET、POST),通过setUrl传入待连接的地址;
(3)设置响应回调函数,读取response;
(4)添加请求到HttpClient任务队列;
(5)释放连接;
(6)对得到的内容进行处理。
代码实例如下
void AsyncHttp::doHttpRequestInternal(HttpRequestData* pRequest){//cocos2d::network::HttpClient::getInstance()->setTimeoutForConnect(1);if (pRequest == nullptr)return;m_threadLocker.lock();unsigned int nCurTagID = m_nNextRequestID;m_nNextRequestID++;m_threadLocker.unlock();char szTag[100] = { '\0' };sprintf(szTag, "%d", nCurTagID);cocos2d::network::HttpRequest* request = new cocos2d::network::HttpRequest();//创建request实例request->setUrl(pRequest->url.c_str());//传入待连接的地址request->setRequestType(pRequest->requestType);//设置连接类型//这是回调对象和回调函数,无论服务器返回怎样的状态,响应主体response body总是可读的,这至关重要request->setResponseCallback(this, httpresponse_selector(AsyncHttp::onHttpRequestCompletedInternal));request->setTag(szTag);request->setHeaders(pRequest->headers);//请求的数据if (pRequest->requestData.msgData != nullptr){request->setRequestData(pRequest->requestData.msgData, pRequest->requestData.dataLen);}if (pRequest->subscriber){m_threadLocker.lock();m_RequestList.insert(std::make_pair(nCurTagID, pRequest));m_threadLocker.unlock();}cocos2d::network::HttpClient::getInstance()->send(request);//添加请求到HttpClient任务队列//释放内存request->release();//释放连接,这是一个可以让整个流程变得完整的关键步骤, 我们必须告诉HttpClient,我们已经完成了连接,并且它现在可以重用。如果不这样做的话,HttpClient将无限期地等待一个连接释放,以便它可以重用。}
//回调函数
void AsyncHttp::onHttpRequestCompletedInternal(cocos2d::network::HttpClient *pSender, cocos2d::network::HttpResponse *pResponse){if (pResponse == nullptr)return;if (pResponse->getHttpRequest()->getTag() == nullptr || strlen(pResponse->getHttpRequest()->getTag()) == 0)return;unsigned int nTagID = 0;sscanf(pResponse->getHttpRequest()->getTag(), "%d", &nTagID);if (nTagID == 0)return;if (!pResponse->isSucceed()){m_threadLocker.lock();std::map<int, HttpRequestData*>::iterator requestIt = m_RequestList.find(nTagID);if (requestIt != m_RequestList.end()){m_RequestList.erase(requestIt);}m_threadLocker.unlock();}else{m_threadLocker.lock();std::map<int, HttpRequestData*>::iterator requestIt = m_RequestList.find(nTagID);if (requestIt != m_RequestList.end()){HttpRequestData* pRequestData = requestIt->second;pRequestData->requestData.setMessageData(pResponse);HttpRequestData* pData = requestIt->second;m_ReceiveBuffer.PushData(pData);m_RequestList.erase(requestIt);}m_threadLocker.unlock();}}
0 0
- cocos 使用HttpClient
- cocos HttpClient enableCookies 大坑
- cocos Httpclient 上传文件到服务器
- httpclient使用
- HttpClient使用
- httpclient 使用
- HttpClient使用
- HttpClient使用
- HttpClient使用
- Httpclient使用
- httpclient使用
- 使用httpClient
- HttpClient使用
- HttpClient使用
- HttpClient使用
- HttpClient使用
- cocos-js 命令行使用
- 使用Cocos 坑 总结
- HTML5学习笔记 —— CSS开发入门
- MindManager 2016中如何查看和修改主题属性?
- RocketMQ集群
- HTML5重新定义的元素
- 【LeetCode】Count and Say 解题报告
- cocos 使用HttpClient
- 自定义属性
- java基础改学C++(五)数组(2)字符串
- C++第五次作业-正数负数和、不重复的数字
- 简单的存储过程编写及MySQL中event调用
- 1018. 锤子剪刀布 (20) PAT
- 恶意被修改代码的经历
- openwrt: Makefile 框架分析
- redis入门