最近使用cocos2dx做一个项目,在测试过程中,发现手机访问网络数据性能不稳定。
通过日志,发现android下curl_easy_perform性能不稳定,一般情况下,返回数据都很快,几十毫秒。但是有些时候,要2秒才返回,最极端的情况甚至到了30秒。
一开始,以为是服务端的问题,后来将url改为baidu.com也依然存在这个问题。
所以,初步怀疑是不是cocos2dx使用的android下的curl库有问题(同样的程序,windows下不存在这个问题,同时,同一台手机的用java写的程序也没有这个问题)
以下是测试代码:(这个代码是从cocos2dx的测试程序的curltest里拷贝出来的,然后加了几个日志)
运行这个测试,一般操作几十次,就会出现一次明显的性能问题。
listener->onTouchBegan = &](cocos2d::Touch* touch, cocos2d::Event* event) {
CURL *curl;
CURLcode res;
char buffer;
time_t b=time(NULL);
_label->setString("begin baidu.com test");
Logger::WriteLog("begin test");
curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "baidu.com");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
time_t e=time(NULL);
if (res == 0)
{
char v;
sprintf(v,"test baidu.com response success, times:%ld seconds",e-b);
_label->setString(v);
}
else
{
sprintf(buffer,"code: %i",res);
_label->setString(buffer);
}
Logger::WriteLog("end test");
}
else
{
_label->setString("no curl");
}
return true;
我们也是遇到了同样的问题,iOS很正常,安卓就不行。开始以为是队列的问题,用了那个sendImmediate后发现有一点点改进,但是没有完全避免。