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 ...
随机推荐
- hive修改 表/分区语句
参考 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable% ...
- mac环境brew安装freetype,imagick等yii2所需要的库
之前整理了一下内置的php环境,各种缺库是很坑爹的,而且内置的php编译目录找了老半天没找到.所以决定使用brew去重新编译一边php brew的安装就不说了,上篇博客有说.直入主题 brew安装完p ...
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat.hprof等小巧的工具,本博客希望 ...
- response 下载文件
String basePath = "D://test.json"; String filename = basePath.substring(basePath.lastIndex ...
- CentOS忘记密码或者丢失口令解决方法
重启系统,然后再五秒之内按下任意键. 进入下面画面后按 [ e ] 键 把光标移动到第二行(或者找到以kernel /vmlinuz开头的),再按下 [ e ] 键 在文本结尾处空一格再添加s ...
- 在引用KindEditor编辑器时,运行时出现以下错误:错误46 找不到类型或命名空间名称“LitJson”(是否缺少 using 指令或程序集引用?)
将asp.net下bin文件夹下的文件LitJSON.dll拷贝到工程的bin目录下,并在工程中添加引用 在后台加入: using LitJson;
- 深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete
上篇文章<深入浅出Mybatis系列(六)---objectFactory.plugins.mappers简介与配置>简单地给mybatis的配置画上了一个句号.那么从本篇文章开始,将会介 ...
- 读javascript高级程序设计17-在线检测,cookie,子cookie
一.在线状态检测 开发离线应用时,往往在离线状态时把数据存在本地,而在联机状态时再把数据发送到服务器.html5提供了检测在线状态的方法:navigator.onLine和online/offline ...
- JS学习笔记--轮播图效果
希望通过自己的学习收获哪怕收获一点点,进步一点点都是值得的,加油吧!!! 本章知识点:index this for if else 下边我分享下通过老师教的方式写的轮播图,基础知识实现: 1.css代 ...
- C# winform中读取HTML代码
这次的任务是在winform建立一个表格,表格第一列需要绑定数据,表格的第一行也需要绑定数据,而其他的单元格数据则是根据对应的行数据和列数据进行提取. 询问过后,需要在后台拼接HTML代码实现这个功能 ...