简单描述下需求:游戏要加入事件log,比如玩家升到10级;创建角色;或是,触发这些事件后要求客户端忘后台抛送一条log信息。一般情况下,我们可以直接使用cocos自带的HttpClient(底层用libcurl实现)来处理,但很多时候,我们游戏其他逻辑也在用HttpClient,比如登录、下载资源等等,这就可能带来一个问题,如果某个时间客户端产生多条错误日志(或是log服务器的带宽有限,大量并发),这些日志请求的发送势必会影响主游戏逻辑,抢占curl队列。
另外也要提到curl的一个特性,当我们调用 curl_easy_perform 函数执行请求,必须等到服务器返回结果后面才能继续,也就是说如果后台服务器因其他原因响应延迟,整个curl队列都得等待。
如何解决上面的尴尬? 显然,比起日志请求,游戏逻辑必须优先保证。 所以我们让日志请求走另外的方式实现,方案:用iOS sdk的http实现。非常简单,而且,抛出去不用管返回!特别适合日志记录这类需求
以下是简单的代码,对于安卓也是类似,我们可以用Android SDK里面的http方式来实现
void sendHttp(const char *url0,int method){ NSString *url = [NSString stringWithUTF8String:url0]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];// autorelease]; [request setURL:[NSURL URLWithString:url]]; if (method == 0) { [request setHTTPMethod:@"POST"]; } else { [request setHTTPMethod:@"GET"]; } NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:nil];}