WebSocket 是跨平台的,其导出到lua的代码位于[quick]/lib/cocos2d-x/scripting/lua/cocos2dx_support/Lua_web_socket.cpp。 php
LuaSocket 也是跨平台的,其导出到lua的代码位于[quick]/lib/cocos2d-x/scripting/lua/lua_extensions/lua_extensions.c。quick 中集成的 LuaSocket 是 2.1RC 版本。 html
[quick]/samples/websockets 是quick提供的一个WebSocket范例。[quick]/samples/cocos2dx_luatest/scripts/ExtensionTest/WebProxyTest.lua也是一个范例。WebSocket 库封装了一些基本的事件支持 open/message/close/error ,在使用的时候比较方便。 html5
WebSocket 天生就是非阻塞的。 git
在 quick 中,并无提供 LuaSocket 的范例。好在该项目自己提供了 很多范例 和 库 。从 ftp 到 socket 服务器实现,应有尽有了。 github
LuaSocket 并无封装事件支持。不过咱们彻底能够本身来封装。LuaSocket 支持阻塞和非阻塞的方式获取数据。 web
我并无作过具体的对比测试,因此无从回答具体性能。但从协议实现上来讲,LuaSocket 应该会高些的。WebSocket 由于要实现 HTTP 握手 和 数据帧 ,性能或许会低那么一点点。 服务器
但从真实应用上来讲,这个性能应该是能够忽略不计了。 websocket
WebSocket 在握手阶段必须使用 HTTP协议 ,此时的流量消耗会比 LuaSocket 略高。但链接创建以后,就与标准的 TCP 协议相同了。 网络
LuaSocket 就不说了,标准的 TCP 协议实现,还支持 UDP/FTP/HTTP/DNS/SMTP。 socket
这里是 WebSocket API 和 LuaSocket API 。毫无疑问,LuaSocket固然更灵活。
灵活和易用彷佛老是一堆矛盾。为了更方便地使用 LuaSocket ,咱们少不了要本身作一些封装。这里有一个 非阻塞的 LuaSocket 封装 ,能够参考。
WebSocket 支持可选的二进制数据传输。LuaSocket 的 send 方法虽然只支持 string ,但其实咱们彻底能够用 string.char() 把须要发送的数据转成二进制编码来传送,效果实际上是一致的。
quick 中封装了lpack,可以更方便的把 lua 中的值转换成二进制数据。而 quick 自带的 luajit 还带有 BitOp 库,支持经常使用的二进制操做。这些都能直接使用,既能用于 WebSocket, 也能用于 LuaSocket。
例以下面这段混用了 lpack 和 BitOp 库的代码:
require("bit") require("pack") local __pack = string.pack("<b3ihb5", 0x59, 0x7a, 0, 11, 1101, 0, 3, bit.bor(0,0), bit.bor(bit.lshift(1,3), 0), bit.bor(bit.lshift(2,3), 0)) local __s = string.gsub(__pack,"(.)",function (x) return string.format("%02d ",string.byte(x)) end) print(__s)
服务端的选择就更普遍了。C/C++/JAVA/Go/Node.js/Python 等主流语言都有 WebSocket 的开源实现。标准的 TCP Socket 就更不用说了,那个是网络基础好吧。
可是,WebSocket 和 标准Socket 服务器的实现,仍是有区别的。主要的问题在于WebSocket的 握手 和 数据帧 方式与标准Socket不一样。
因为咱们的服务端已经采用标准Socket实现,再转向 WebSocket 就有点画蛇添足。因此我这个客户端就苦B一点把,把 LuaSocket 封装一下直接用了。
bsdsocket + protobuf
http://blog.csdn.net/zzhboy/article/details/9878941