Forums » Lua Binding » a little mind of binding luasocket to cocos2d-x »
| 杨 颖 | a little mind of binding luasocket to cocos2d-x | ||||
|---|---|---|---|---|---|
|
Added by 杨 颖 about 1 year ago
不好意思,我的英文实在太差了,只好用中文,反正这也不是求助:) 今天好不容易绑定了luasocket2.02到cocos2d-x0.12的版本,可是正准备开写的时候突然楞住了,如果我的lua游戏逻辑需要跟服务器交互,那么我在lua中创建了一个socket并连接到服务器后,每次的send,recv都是阻塞的,而我的界面代码又是lua在执行,这也就意味着每次send,recv的时候,游戏就将卡在那里,然后等send,recv执行完毕界面才能动,局域网还好,如果是广域网呢,这是不可接受的。在c++或者别的语言里,一般是新建一个thread来解决阻塞的问题,可是我们亲爱的Lua是不支持thread的,她所支持的协程只能用于非阻塞代码,所以绑定了luasocket到cocos2d-x的行为是愚蠢的,除非你的代码在局域网内运行。 之所以写到这里,是希望国内像我一样对c++不熟悉又打算用简单的Lua来写游戏的朋友不再犯我这样的错误,抛砖引玉。 上面光写了问题,还没写解决办法呢。这里也说说我的不成熟的想法,就像平时我们在别的语言里写网络程序一样,当你有IO操作不想阻塞掉用户界面的时候,就只能用异步IO或者开一个专门的线程来执行IO操作,最后在IO完成的时候再通知到界面代码,这里无疑也只能这样解决。你可以在cocos2d-x的主程序代码(c++)里面用一个线程封装好你的socket操作,然后在主线程里增加两个数据队列(发送和接收,要有同步锁),最后封装两个函数往里面塞数据和取数据,lua代码则起协程来调用这两个函数,这两个函数是不会阻塞的,所以lua操作的界面也不会阻塞。另外lua在每次调用完这些非阻塞的函数后,可以把调用协程挂起,而c++里处理完队列数据的发送接收后再唤醒协程,这样可以了。 上面只是一个思路,我没有验证的,大家可以试试。 |
||||
| YuLei Liao | RE: 大家不要再去绑定luasocket到cocos2d-x的lua了 | ||||
|
Added by YuLei Liao about 1 year ago
|
||||
| 杨 颖 | RE: 大家不要再去绑定luasocket到cocos2d-x的lua了 | ||||
|
Added by 杨 颖 about 1 year ago
看了你的帖子,有两个问题: 2.llthread应该是你写的,因为我在网上搜到的没有lua对线程的支持库,可是Lua里开线程稳定吗?我看你好像是cocos2d-x的lua负责人,久仰了,上面写的东西写得有问题请多包涵,开始确实没找到lua对线程的支持。 刚刚又想到个问题,你的那种情况是解决某一个阻塞IO的操作时用的,比如你里面的一个http请求,这种请求做完就返回一个数据就完了,如果是那种长连接应该怎么办呢,就是说一直运行在那里的线程跟服务器收数据给主线程呈现,然后主线程根据用户的请求发送数据给服务器。 |
||||
| 叫NPC 我的名字 | RE: 大家不要再去绑定luasocket到cocos2d-x的lua了 | ||||
|
Added by 叫NPC 我的名字 about 1 year ago
我也正在做这个集成。 |
||||
| YuLei Liao | RE: 大家不要再去绑定luasocket到cocos2d-x的lua了 | ||||
|
Added by YuLei Liao about 1 year ago
以前是把 llthreads 放到 cocos2d-x 仓库中的,但后来考虑到保持 cocos2d-x 的单纯,所以又去掉了。现在自己下载集成即可。 llthreads 是别人开发的 lua 模块,下载地址: https://github.com/Neopallium/lua-llthreads 。我自己使用是很稳定的,还没发现问题。 你说的长连接应该是开个独立的线程来维护连接,并通过某种渠道和主线程交换数据。 |
||||
| Zhe Wang | RE: 大家不要再去绑定luasocket到cocos2d-x的lua了 | ||||
|
Added by Zhe Wang about 1 year ago
Please use English in this forum. Enjoy Coding, Enjoy Life. |
||||
| 杨 颖 | RE: 大家不要再去绑定luasocket到cocos2d-x的lua了 | ||||
|
Added by 杨 颖 about 1 year ago
OK. |
(1-6/6)