2016-12-03 回答
websocket是html5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。在websocket api中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
cocos2d-x引擎集成libwebsockets,并在libwebsockets的客户端api基础上封装了一层易用的接口,使得引擎在c++, js, lua层都能方便的使用websocket来进行游戏网络通讯。
引擎支持最新的websocket version 13。
在c++中使用
详细代码可参考引擎目录下的/samples/cpp/testcpp/classes/extensionstest/networktest/websockettest.cpp文件。
头文件中的准备工作
首先需要include websocket的头文件。
#include "network/websocket.h"
cocos2d::network::websocket::delegate定义了使用webscocket需要监听的回调通知接口。使用websocket的类,需要public继承这个delegate。
class websockettestlayer : public cocos2d::layer, public cocos2d::network::websocket::delegate
并override下面的4个接口:
virtual void onopen(cocos2d::network::websocket* ws);
virtual void onmessage(cocos2d::network::websocket* ws, const cocos2d::network::websocket::data& data);
virtual void onclose(cocos2d::network::websocket* ws);
virtual void onerror(cocos2d::network::websocket* ws, const cocos2d::network::websocket::errorcode& error);
后面我们再详细介绍每个回调接口的含义。
新建websocket并初始化
websocket.org 提供了一个专门用来测试websocket的服务器"ws://echo.websocket.org"。 测试代码以链接这个服务器为例,展示如何在cocos2d-x中使用websocket。
新建一个websocket:
cocos2d::network::websocket* _wsisendtext = new network::websocket();
init第一个参数是delegate,设置为this,第二个参数是服务器地址。 url中的"ws://"标识是websocket协议,加密的websocket为"wss://".
_wsisendtext->init(*this, "ws://echo.websocket.org")