cocos2d-x WebSocket
WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
Cocos2d-x引擎集成libwebsockets,并在libwebsockets的客户端API基础上封装了一层易用的接口,使得引擎在C++, JS, Lua层都能方便的使用WebSocket来进行游戏网络通讯。
- #include "network/WebSocket.h"
- class WebSocketTestLayer : public cocos2d::Layer, public cocos2d::network::WebSocket::Delegate
- 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);
- cocos2d::network::WebSocket* _wsiSendText = new network::WebSocket();
- _wsiSendText->init(*this, "ws://echo.websocket.org")
- void WebSocketTestLayer::onOpen(network::WebSocket* ws)
- {
- if (ws == _wsiSendText)
- {
- _sendTextStatus->setString("Send Text WS was opened.");
- }
- }
- void WebSocketTestLayer::onMessage(network::WebSocket* ws, const network::WebSocket::Data& data)
- {
- if (!data.isBinary)
- {
- _sendTextTimes++;
- char times[100] = {0};
- sprintf(times, "%d", _sendTextTimes);
- std::string textStr = std::string("response text msg: ")+data.bytes+", "+times;
- log("%s", textStr.c_str());
- _sendTextStatus->setString(textStr.c_str());
- }
- }
- void WebSocketTestLayer::onClose(network::WebSocket* ws)
- {
- if (ws == _wsiSendText)
- {
- _wsiSendText = NULL;
- }
- CC_SAFE_DELETE(ws);
- }
- void WebSocketTestLayer::onError(network::WebSocket* ws, const network::WebSocket::ErrorCode& error)
- {
- log("Error was fired, error code: %d", error);
- if (ws == _wsiSendText)
- {
- char buf[100] = {0};
- sprintf(buf, "an error was fired, code: %d", error);
- _sendTextStatus->setString(buf);
- }
- }
- _wsiSendText->send("Hello WebSocket, I'm a text message.");
- _wsiSendBinary->send((unsigned char*)buf, sizeof(buf));
- _wsiSendText->close();
- wsSendText = WebSocket:create("ws://echo.websocket.org")
- local function wsSendTextOpen(strData)
- sendTextStatus:setString("Send Text WS was opened.")
- end
- local function wsSendTextMessage(strData)
- receiveTextTimes= receiveTextTimes + 1
- local strInfo= "response text msg: "..strData..", "..receiveTextTimes
- sendTextStatus:setString(strInfo)
- end
- local function wsSendTextClose(strData)
- print("_wsiSendText websocket instance closed.")
- sendTextStatus = nil
- wsSendText = nil
- end
- local function wsSendTextError(strData)
- print("sendText Error was fired")
- end
- if nil ~= wsSendText then
- wsSendText:registerScriptHandler(wsSendTextOpen,cc.WEBSOCKET_OPEN)
- wsSendText:registerScriptHandler(wsSendTextMessage,cc.WEBSOCKET_MESSAGE)
- wsSendText:registerScriptHandler(wsSendTextClose,cc.WEBSOCKET_CLOSE)
- wsSendText:registerScriptHandler(wsSendTextError,cc.WEBSOCKET_ERROR)
- end
- wsSendText:sendString("Hello WebSocket中文, I'm a text message.")
- wsSendText:close()
- this._wsiSendText = new WebSocket("ws://echo.websocket.org");
- this._wsiSendText.onopen = function(evt) {
- self._sendTextStatus.setString("Send Text WS was opened.");
- };
- this._wsiSendText.onmessage = function(evt) {
- self._sendTextTimes++;
- var textStr = "response text msg: "+evt.data+", "+self._sendTextTimes;
- cc.log(textStr);
- self._sendTextStatus.setString(textStr);
- };
- this._wsiSendText.onerror = function(evt) {
- cc.log("sendText Error was fired");
- };
- this._wsiSendText.onclose = function(evt) {
- cc.log("_wsiSendText websocket instance closed.");
- self._wsiSendText = null;
- };
- this._wsiSendText.send("Hello WebSocket中文, I'm a text message.");
- _stringConvertToArray:function (strData) {
- if (!strData)
- return null;
- var arrData = new Uint16Array(strData.length);
- for (var i = 0; i < strData.length; i++) {
- arrData[i] = strData.charCodeAt(i);
- }
- return arrData;
- },
- var buf = "Hello WebSocket中文,\0 I'm\0 a\0 binary\0 message\0.";
- var binary = this._stringConvertToArray(buf);
- this._wsiSendBinary.send(binary.buffer);
- onExit: function() {
- if (this._wsiSendText)
- this._wsiSendText.close();
- },
转自:http://blog.sina.com.cn/s/blog_923fdd9b0101ggao.html
cocos2d-x WebSocket的更多相关文章
- Cocos2d-X网络编程(3) Cocos2d中的网络通信协议——WebSocket协议
WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信.实现浏览器与服务器的即时通讯.即服务器也能主动向客户端发消息. WebSocket代理类和方法: co ...
- 【转】【cocos2d-x教程】如何使用WebSocket
介绍 WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术.在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快 ...
- [Cocos2d-x]在Cocos2d-x 3.x如何通过版本号WebSocket连接server数据的传输
WebSocket 首先新建一个空的目录,通过npm安装nodejs-websocket: npm install nodejs-websocket 新建app.js文件: var ws = requ ...
- Cocos2d-x网络通信
Cocos2d-x示例提供了三种内置的网咯通信类 HttpClient,WebSocket,SocketIO. 其中第一个是简单的HTTP协议的使用,提供很多Http请求方式. 剩下的Socket*是 ...
- Cocos2d-x 网络编程
主要介绍内容:Http协议,Socket协议,webSocket协议, Cocos2d-x中的相关类和方法 1 Http协议 HTTP协议也叫超文本传输协议.是互联网广泛使用的通信协议,常用于B/S架 ...
- 漫扯:从polling到Websocket
Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...
- 细说WebSocket - Node篇
在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...
- java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- WebSocket - ( 一.概述 )
说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...
随机推荐
- Redis在JAVA中的运用(工具类)
最近项目需要用redis在中间做缓存所以写了一个工具类作为练习用 redis版本:redis_version:3.0.504 用到阿里的解析JSON的库:fastjson import org.apa ...
- 只需一点小修改,HTC Vive画面会更清晰锐利
这里要先谢谢@NB81rkd0qB,他的那个帖子里其实很多碰到的问题都可以解决,但是目前有点乱,所以我这里斗胆整理一下,希望能帮助一下朋友们.第一步:我们要找到[steamvr.vrsettings] ...
- 使用cocos2d-x c++ Android静态库
在用cocos2d-x做Android开发时,每次clean后都会需要再次编译coco2d-x的库,十分耗时. 这里给出一个直接使用静态库而不用每次都编译源码的方法: 1\ 首先找到一个cocos2d ...
- ERROR [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名
连接excel odbc时发生如下问题: 是因为数据源(odbc)没有配置excel 驱动:控制面板->管理工具->数据源(ODBC): 添加: 如无效果,则可能是位数引起的,比如系统是6 ...
- flume介绍与原理(一)
1 .背景 flume是由cloudera软件公司产出的可分布式日志收集系统,后与2009年被捐赠了apache软件基金会,为hadoop相关组件之一.尤其近几年随着flume的不断被完善以及升级版本 ...
- jQuery对象与dom对象的转换
一直以来对于通过jQuery方式获取的对象使不能直接使用JavaScript的一些方法的,开始的时候不理解,现在此案知道,原来jQuery获得的对象并不和我们平时使用getElementById获得的 ...
- 制作简单的2D物理引擎(一)——动力学基础
一切的基础 点 在二维平面中,点$P$就是坐标$(x,y)$,点集就是一系列坐标的集合$\{P_1,P_2,...,P_n\}$,不过这个集合是有序的(顺时针). 向量 加减运算 $$\vec{P}\ ...
- Jquery想说爱你不容易
JQuery是一套跨浏览器的JavaScript库,简化HTML与JavaScript之间的操作.由John Resig在2006年1月的BarCamp NYC上发布第一个版本.目前是由 Dave M ...
- 学习ios【2】Objective-C 数字和字符串
一 数字 1.使用Foundation.h可以直接导入所有的头文件. 在XCode中,想查看某个方法帮助,可以将光标放在方法上,按住option键同时单击即可. 官方文档:https://develo ...
- performSelector和performSelectorInBackground
前者是在主线程下完成的, 不会自动创建一个线程. 后者会创建一个新的线程.