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 ...
随机推荐
- 撤销git reset soft head操作
一不小心在eclipse的git库中执行了Reset Soft(HEAD ONLY)操作,不料界面中竟然没有找到撤销方法(于是心中五味俱全,经过一番折腾,无果还是回归Git本身),最终通过命令行,很快 ...
- AutoCAD .NET API 之——DimStyleTableRecord 的属性列表
DimStyleTableRecord Properties: Properties Description(描述) Dimadec 角度标注保留的有效位数 Dimalt 控制是否显示换算单位标注值中 ...
- spark快速大数据分析学习笔记*初始化sparkcontext(一)
初始化SparkContext 1// 在java中初始化spark import org.apache.spark.SparkConf; import org.apache.spark.api.ja ...
- VNC SERVER配置
vnc的配置网上有很多 普通用户的配置没有怎么写 根据下面这个说法 https://www.digitalocean.com/community/tutorials/how-to-install-an ...
- appium 1.6.3+Xcode运 For Mac
1. 下载两个版本的Xcode, Xcode 1.7.3 与Xcode 8.2 ,放置在不同的目录下.进入terminal, 选择需要的版本: sudo xcode-select -switch // ...
- cssReset - css初始化
/*cssReset.css文件内容*/@charset "utf-8"/*整个页面的文字和背景色*/html{color:#000;background:#FFF;}/*设置外边 ...
- 在iframe父界面获取iframe里面的标签
上一篇里边介绍了在里边利用iframe引入另一个html导航文件,有兴趣的朋友可以看一看 http://www.cnblogs.com/simba-lkj/p/6031662.html 目前遇到一些问 ...
- MVC5 Entity Framework学习之Entity Framework高级功能(转)
在之前的文章中,你已经学习了如何实现每个层次结构一个表继承.本节中你将学习使用Entity Framework Code First来开发ASP.NET web应用程序时可以利用的高级功能. 在本节中 ...
- 【翻译】configuration changes与handler.post
原文地址 http://corner.squareup.com/2013/12/android-main-thread-2.html 在前一部分里面previous part ,我们深入挖掘了 loo ...
- Java EE : 一、图解Http协议
目录 Java EE : 一.图解Http协议 Java EE : 二.图解 Cookie(小甜饼) Java EE : 三.图解Session(会话) 概述 一.技术基石及概述 二.深入理解技术基石 ...