游戏业余爱好者疑问:服务端lua脚本和客户端如何优雅的交互?市面常见游戏的lua交互是如何设计的呢?

zhllxt 2018-02-09 06:01:23


我着重强调一下:我不是问lua和c++在技术代码上如何交互的问题,我是问服务端lua和客户端如何交互。

我10年c++,游戏业余爱好者。

我举个例子来描述我的问题:

1、客户端玩家点击NPC
2、客户端发送消息到服务端
3、服务端收到消息,调用lua脚本
4、【lua脚本将脚本中的文字发送到客户端】
5、客户端将文字显示在和NPC交互的对话框上。

一、这是我想像的游戏的逻辑处理流程,我也不知道游戏开发公司是不是这种逻辑思路来处理的?

二、最大的问题在于:【lua脚本将脚本中的文字发送到客户端】 这一部分,因为lua脚本本身并不具备网络通信的功能,那么我能想到的就是用c++封装好一个网络通信函数,然后lua脚本调用我这个函数将脚本中的文字发送到客户端,理论上这是可行的。但是我觉得这有一个问题啊:游戏中有成千上万的业务逻辑的lua脚本,也就意味着有成千上万的lua脚本调用c++封装好的网络通信函数 即使把这些通信函数进行归类,那归完类也还是有很多啊,难道我真的要在c++程序中造这么多种不同的网络通信函数,留给lua脚本调用吗?这就是我的疑问。我想知道的是:是否有成熟的非常好的解决方案来解决这个问题?

因为我从来没做过游戏,所以我想也许我这个问题就是弱智入门级的问题,而且早就有人想到这个问题了,早就有现成的思路了,我就是想知道这个思路,和如何处理的。









...全文
2241 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
smwhotjay 2020-03-08
  • 打赏
  • 举报
回复
网游里的通信消息成百上千。都不是事。 c++是底层模块。网络模块。早期是纯c++游戏世界模块.仅在npc里加入了脚本给策划自定义游戏任务流程玩法。 lua里比如npc的响应 对话玩家。然后会调用c++对应的接口对话玩家。完成对应的功能。
tree2000 2019-11-09
  • 打赏
  • 举报
回复
现在都用框架了。
不知道了。纯顶一下。
zgbzsu2008 2018-12-18
  • 打赏
  • 举报
回复
云风的skynet了解下
风吹腚腚凉 2018-07-11
  • 打赏
  • 举报
回复
肯定不是这样,都是存在你本地的,怎么会发送到服务器端?
如果是可以变化的话,我顶多传送一个消息,然后从内存里拿出指定的字符串而不是把字符串传送到客户端。
就光说你这个通讯的问题,我也不太了解哈哈
freshman_cy 2018-07-10
  • 打赏
  • 举报
回复
luabind 了解一下
勤奋的小游侠 2018-06-21
  • 打赏
  • 举报
回复
我猜你是没有搞懂网络通信中的序列化和反序列化这个技术点。

通常c++就只提供一个接口给lua, 这个接口接受一个const char* buff和一个int len参数。

各个业务的lua函数要发送消息前,先要将自己发送的消息变成一个buff.就是一个内存块,告诉c++,你把这块长度为len的内存块发给客户端,至于内存块代表了什么东西,你不用管,客户端收到了会自己反序列化,把buff变成发送前的东西。

如果你要发字符串,数字,图片,或者其它各种各样的东西,都没有问题,只要服务器和客户端协商好怎么序列化和反序列化就可以了。

序列化有不少的方案,最简单的就是二进制
|4字节表示消息长度|4字节表示消息类型|剩下的就是消息体。

前面8字节通常叫消息头。

另外游戏行业比较成熟的序列化方案是用protocol buff.你可以了解一下。

zhllxt 2018-06-21
  • 打赏
  • 举报
回复
引用 5 楼 lovesmiles 的回复:
我猜你是没有搞懂网络通信中的序列化和反序列化这个技术点。

通常c++就只提供一个接口给lua, 这个接口接受一个const char* buff和一个int len参数。

各个业务的lua函数要发送消息前,先要将自己发送的消息变成一个buff.就是一个内存块,告诉c++,你把这块长度为len的内存块发给客户端,至于内存块代表了什么东西,你不用管,客户端收到了会自己反序列化,把buff变成发送前的东西。

如果你要发字符串,数字,图片,或者其它各种各样的东西,都没有问题,只要服务器和客户端协商好怎么序列化和反序列化就可以了。

序列化有不少的方案,最简单的就是二进制
|4字节表示消息长度|4字节表示消息类型|剩下的就是消息体。

前面8字节通常叫消息头。

另外游戏行业比较成熟的序列化方案是用protocol buff.你可以了解一下。


一语惊醒梦中人,明白了,非常感谢!

文修 2018-04-17
  • 打赏
  • 举报
回复
楼主你好, 我之前主导参与过一个房卡棋牌游戏得开发,服务端用NodeJS,客户端用cocos,lua,数据库用mysql,游戏内数据用redis, 客户端并不是纯lua,如今手游大多是cocos2d,加上lua,什么网络连接的完全不是事
繁重的秋春 2018-03-05
  • 打赏
  • 举报
回复
引用 2 楼 zhllxt 的回复:
[quote=引用 1 楼 linjinxing1987 的回复:] 你是不是应该先找个已经有的框架?虽然我忘记了,这个框架叫什么名字。。。 像通讯这块,根本就不需要你重新封装的。
http://blog.csdn.net/linshuhe1/article/details/70488460 老哥,能不能帮我想一想,名字叫什么,我搜出来看一下,从来没搞过。我只想要搞清楚服务端LUA脚本和客户端如何交互的问题。 [/quote]
引用 2 楼 zhllxt 的回复:
[quote=引用 1 楼 linjinxing1987 的回复:] 你是不是应该先找个已经有的框架?虽然我忘记了,这个框架叫什么名字。。。 像通讯这块,根本就不需要你重新封装的。
老哥,能不能帮我想一想,名字叫什么,我搜出来看一下,从来没搞过。我只想要搞清楚服务端LUA脚本和客户端如何交互的问题。 [/quote] http://blog.csdn.net/linshuhe1/article/details/70488460
zhllxt 2018-02-27
  • 打赏
  • 举报
回复
引用 1 楼 linjinxing1987 的回复:
你是不是应该先找个已经有的框架?虽然我忘记了,这个框架叫什么名字。。。 像通讯这块,根本就不需要你重新封装的。
老哥,能不能帮我想一想,名字叫什么,我搜出来看一下,从来没搞过。我只想要搞清楚服务端LUA脚本和客户端如何交互的问题。
繁重的秋春 2018-02-27
  • 打赏
  • 举报
回复
你是不是应该先找个已经有的框架?虽然我忘记了,这个框架叫什么名字。。。 像通讯这块,根本就不需要你重新封装的。

721

社区成员

发帖
与我相关
我的任务
社区描述
Cocos2d-x相关内容讨论专区
社区管理员
  • Cocos2d-x
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧