C语言与Python, Lua, PHP等语言的接口

22 views
Skip to first unread message

benegg

unread,
Aug 30, 2009, 9:21:40 AM8/30/09
to online_game_dev
在网络游戏等网络系统的开发中, 一般用多种语言配合开发. 用C来开发通信, 高密度运算等基础功能, 由脚本语言或者Java, C#等更高级的语
言进行业务处理. 在这种架构方面, Web系统是最广泛, 功能最强大的一个应用. 整个因特网可以说是建立在脚本之上, 虽然Web服务器, 数据
库大多是用C开发的.

C语言和脚本语言(本文中包括Java等所有高级语言)的通信有两个层次: 1, 编程语言接口(API); 2, 进程间通信(IPC).

编程语言接口的方式, 可以看作是线程单(进程内)通信, 在某些方面速度较快. 但是接口多样, 各种语言都不相同, 造成不必要的复杂度.

进程间通信包括网络通信(Socket), 本地通信(如管道). 使用本种方式, C语言与脚本语言是单一接口, 而且统一.

Web服务器可能包括两种通信方式, 如Apache可以通过fastcgi和PHP进行Socket通信, 也可以通过mod_php使用API与
PHP进行通信.

来自: http://www.benegg.com/?p=49

杨景

unread,
Aug 31, 2009, 3:42:31 AM8/31/09
to online_...@googlegroups.com
请问下benegg,进程间通信Java方面有什么方法?
C,Java和PHP三者之间有没有什么较为统一的方式实现通信?有的话有哪些方式呢?能否给些参考。
谢谢!

2009/8/30 benegg <ide...@163.com>

benegg

unread,
Aug 31, 2009, 6:08:18 AM8/31/09
to online_game_dev
如果说要C, Java, PHP进行通信, 最方便的方法是TCP/IP, 使用socket. 每一种语言都只需要写几百行的网络接口代码, 把网
络数据生成语言相关的对象, 放入队列, 然后就可以处理了.

关键在于网络通信协议的定义, 比如, 如何序列化一个登录报文, 让C, Java, PHP都认识, 这就由你来定了. 一旦定出来, 接口代码的
编写也非常简单. 也可以使用通信的协议, 如json, Google 的 protobuf 等等.

杨景

unread,
Aug 31, 2009, 8:54:56 PM8/31/09
to online_...@googlegroups.com
嗯,谢谢您的回答。那我就先了解下json和protobuf,有什么不懂的再向您请教。


2009/8/31 benegg <ide...@163.com>
Message has been deleted

benegg

unread,
Sep 4, 2009, 8:12:41 AM9/4/09
to online_game_dev
这方面资料比较少, 希望大家分享, 或者发表自己的想法. 我更倾向于不同的语言在不同的进程中, 通过API方式交互确实不是很好的方式.

On Sep 4, 8:09 pm, 木木王 <songlin...@gmail.com> wrote:
> 有朋友对lua有所研究嘛?如何将lua很好的融入到游戏中去。

Message has been deleted

benegg

unread,
Sep 4, 2009, 11:16:35 AM9/4/09
to online_game_dev
针对你说的几点, 我说说我的看法:

1. 用lua做配置文件使用, 好像见过一些. 不过, 配置文件能在项目中占多大的比重呢?
2. 不知道是什么类型的简单的运算?
3. 函数可以看作是死的, 函数必须有数据才能有活力. 这些数据可能通过参数传递, 也可以是函数外围(全局)的. 这些数据的组织, 假设C
+Lua, 是用C来做, 还是用Lua来做呢? 这一点我比较疑惑. 假设我用C语言实现了连连看游戏算法, 有相应的C数据结构, 那么, 能把什
么交给Lua做呢? 如果反过来, 用Lua实现了连连看游戏算法, 又如何? 对于后一种情况, 如果说考虑性能用C来做连通测试, 那么C程序必须
先将Lua的数据结构转化, 可能性能得不偿失.

想来想去, 我还是觉得Web系统是多语言混合的最佳实例 - 无论从服务器端还是客户端.

On Sep 4, 8:24 pm, songlin luo <songlin...@gmail.com> wrote:
> 让lua毫无忌惮的执行,是件很危险的事情。本人打算这么做:
> 1.lua做配置文件使用
> 2.lua运行简单的运算
> 3.lua调用引擎内函数,同时引擎内函数也可以调用lua函数,共同完成游戏的部分AI以及业务模块。
>
> 对于第3点,本人还没有实现。聆听下高手的意见。

Reply all
Reply to author
Forward
0 new messages