【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 1940|回复: 0

cocos2d-x 开发网络游戏(http post&socket)

[复制链接]
发表于 2013-8-14 14:15:16 | 显示全部楼层 |阅读模式

最近开发一个手机版的多人在线游戏,和服务器通讯要用到socket长连接和http短连接。刚好这几天有不少人问我这方面的知识。我今天就给大家讲下吧。


大家应该知道在cocos2d-x上面使用socket一般有BSDSocket,http一般用curl,但实际用的过程中还是有很多问题。之前也有很多人写过这方面的教程,我就不重复了,我说下我自己在项目中使用的。


Socket我使用boost,http请求使用libhttp。


socket比较麻烦,先说libhttp吧。


一、libhttp的使用方法:

1、首先去网上下载这三个资源文件:curl、jsoncpp、libhttp。

2、下载好后,将他们加到自己的工程libs目录下。

http请求:(这是异步请求)里面设计到的函数在这几个头文件中#include “json.h”#include “Http.h”

  1. Json::Value BYGameApiRequest::gameLogin(const std::string &name,const std::string &psw){

  2. RequestParam params;

  3. // params就是存放需要post到服务器的数据

  4. // params.addParam("name", name);

  5. // params.addParam("psw",psw);

  6. Response response;

  7. m_request->syncRequest(BY_GAME_API_URL+BYMethod::GAME_LOGIN+"?userId="+name, Request::Post, params, &response);

  8. Json::Value root=NULL;

  9. Json::Reader reader;

  10. // cout << response.getRawData();

  11. string res=string(response.getRawData(),response.m_rawDataSize);

  12. reader.parse(res.c_str(), root, false);

  13. return root;//这就是服务器返回的json数据格式。

  14. }
复制代码
上面的这个方法,就可以实现和服务器的post请求,这个函数一般放在什么地方好呢?我的建议是,在游戏工程中建立一个单例类GameAPIRequest,这个单例类就负责请求所有的api数据,一般请求的api是有自己公司定义的格式的,所以所有的函数、参数,我建议建立一个Config和Method的配置类,专门宏定义格式给GameAPIRequest使用。这样服务器修改了格式什么的,只需要在配置类中修改就可以了。二、socket使用方法:添加boostframework库到libs,这个需要自己将boost打包成.framework汗…..这个需要自己实现的是在太多了,我改天从我项目中把代码抽出来新建个demo工程。不好意思咯。有空闲时间的朋友可以自己找资料学学看。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-11-23 22:22

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表