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 ...
随机推荐
- JDBC总结(含DbUtils组件)
jdbc1. jdbc:使用java代码(程序)发送sql语句的技术2. jdbc的核心接口(查看API): java.sql Driver,DriverManger,Statement,Result ...
- Python之路 day3 高阶函数
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 变量可以指向函数,函数的参数能接收变量, 那么 ...
- android JNI开发
1.NDK简介 NDK(Native Development Kit)NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.NDK集成了交叉 ...
- Linux下漏洞提权
Linux下的漏洞提权 linux下一般都是系统漏洞提权,分为以下几个步骤:
- PHP控制div块大小和颜色的例子
网站为了设计的更好看,会有很多的样式,而用php来控制样式很常见,无聊写了一个可以用于列表展示的样式,不喜忽喷. 1.先添加一个style样式控制div默认不换行 <style>div{f ...
- VMware中linux配置1-安装VMware tool 共享文件夹
linux:ubuntu 14 安装Linux,使用的ubuntu-14.04.1-desktop-amd64.iso 安装的,这个就不写了. 为了在linux中访问windows的目录,需要安装VM ...
- map erase iterator
错误写法: map<int, int> m; for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) ...
- hihoCoder挑战赛25
萌新第一次打hihoCoder的比赛有点慌 T1 T1并不是特别难想到dp就好做了 显而易见的是一个01背包问题 Code: #include <cstdio> #include < ...
- Spring Bean
一.Spring的几大模块:Data access & Integration.Transcation.Instrumentation.Core Spring Container.Testin ...
- 浅析final 关键字
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.下 ...