[寒江孤叶丶的Cocos2d-x之旅_14]Cocos2d-x 3.2版本以上LUA脚本Socket通讯解决方案——LuaSocket
来源:互联网 发布:淘宝热门店铺秒杀技巧 编辑:程序博客网 时间:2024/06/05 19:53
原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的Cocos2d-x之旅系列]
博客地址:http://blog.csdn.net/qq446569365
在Coco2d-x3.2版本中,对LuaSocket进行了集成,我们可以直接在程序中调用luaSocket进行方便的TCP/UDP/FTP/HTTP等等通讯,非常方便。
下边先上一段代码:
local socket = require("socket") local host = "115.28.*.*" local port = 8890 local c = socket.tcp() --c:settimeout(5) local n,<span style="font-family: Arial, Helvetica, sans-serif;">e</span><span style="font-family: Arial, Helvetica, sans-serif;"> = c:connect(host, port)</span> print("connect return:",n,e)--通过判断n可以判断连接是否成功,n是1表示成功 n是nil表示不成功 c:send("Hello") while true do local response, receive_status=c:receive() --print("receive return:",response or "nil" ,receive_status or "nil") if receive_status ~= "closed" then if response then print("receive:"..response) end else break end end end这段代码实现了TCP的链接,并像服务器发送了一段“Hello”,然后便阻塞进程等待服务器消息了。
说到阻塞,就不得不提到多进程,然后在LUA中,使用多线程会极大程度降低LUA的性能。
这里 LuaSocket提供了一个不错的解决方案:c:settimeout(0)
经过这样的设置,程序便不会发生阻塞,然后在schedule中循环调用即可。
附上一个目前我程序中的临时解决方案:
function socketInit() local socket = require("socket") local host = "115.28.*.*" local port = 8890 G_SOCKETTCP = socket.tcp() local n,e = G_SOCKETTCP:connect(host, port) print("connect return:",n,e) G_SOCKETTCP:settimeout(0)endfunction socketClose() G_SOCKETTCP:close()endfunction socketSend(sendStr) G_SOCKETTCP:send(sendStr)endfunction socketReceive() local response, receive_status=G_SOCKETTCP:receive() --print("receive return:",response or "nil" ,receive_status or "nil") if receive_status ~= "closed" then if response then print("Receive Message:"..response) --对返回的内容进行解析即可 end else print("Service Closed!") endend然后在程序中进行调用即可
socketInit() local timePassed = 0 local function myHandler(dt) timePassed= timePassed + dt if timePassed > 0.1 then socketReceive() timePassed= 0 end end self:scheduleUpdateWithPriorityLua(myHandler,1) --print(self.roomType) local jsonStr=getRoomInformationJson(self.roomType) print(jsonStr) socketSend(jsonStr)
在Lua程序设计第二版中,提到了通过C语言函数来实现LUA多线程的功能,我会在下一篇博客中详细介绍。
特别提醒:LuaSocket在receive的时候,是把\n当成结尾,如果没有\n,会出现timeout的错误,所以服务器在发送消息的时候,一定要记得在消息的最后加一个\n作为结尾!
1 0
- [寒江孤叶丶的Cocos2d-x之旅_14]Cocos2d-x 3.2版本以上LUA脚本Socket通讯解决方案——LuaSocket
- [寒江孤叶丶的Cocos2d-x之旅_13]Cocos2d-x 3.2版本以上LUA脚本加密解决方案【12.19更新】
- [寒江孤叶丶的Cocos2d-x之旅_17]Cocos2d-x 3.2版本以上LUA脚本热更新(动态更新)解决方案
- [寒江孤叶丶的Cocos2d-x之旅_16]Cocos2d-x LUA脚本中解析Json的方法
- [寒江孤叶丶的Cocos2d-x之旅_23]Cocos2d-x LUA实现事件分发器 lua EventDispatcher
- cocos2d-x 与lua 通讯
- [寒江孤叶丶的Cocos2d-x之旅_18]Cocos2d-x 3.x arm64错误的解决方案
- Cocos2d-x之LUA脚本引擎浅析
- [寒江孤叶丶的Cocos2d-x之旅_24]Cocos2d-x LUA 解析 Csv文件的方法
- [寒江孤叶丶的Cocos2d-x之旅_38]LUA重新加载脚本
- [寒江孤叶丶的Cocos2d-x之旅_15]Cocos2d-x LUA脚本中对字符串进行Base64加解密/编解码 (LUA Base64 加解密/编解码)
- Cocos2d-x中Lua脚本的加密
- cocos2d-x lua脚本简单的了解
- Cocos2d-x 3.0及以上版本资源及脚本解密
- quick-cocos2d-x 中的 socket 技术选择:LuaSocket 和 WebSocket
- quick-cocos2d-x 中的 socket 技术选择:LuaSocket 和 WebSocket
- quick-cocos2d-x 中的 socket 技术选择:LuaSocket 和 WebSocket
- Cocos2d-x 2.20及以上版本如何创建基于Lua的项目
- 堆 和 栈的 区别
- J-LINK突然不能下载(错误:JLink Warning: RESET (pin 15) high, but should be low. Please check target)
- Linux(CentOS)下的apache服务器配置与管理
- Java路径空格问题
- JavaScript 与jquery 之间不同的函数调用方式
- [寒江孤叶丶的Cocos2d-x之旅_14]Cocos2d-x 3.2版本以上LUA脚本Socket通讯解决方案——LuaSocket
- <图形图像,动画,多媒体> 读书笔记 --- 视频
- Office 2010: word中如何新建博客文章
- 知者不惑,仁者不忧,勇者不惧 --- 《论语》
- mysql 索引( mysql index )
- Nagios监控mongodb分片集群服务实战
- Android 超高仿微信图片选择器 图片该这么加载
- 每天一个小算法(matlab armijo)
- 开灯问题与数组清零