`
hpyhacking
  • 浏览: 17419 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

openpoker开源项目 源代码解析

阅读更多

最近主攻erlang编程,erlang在处理网络并发可谓具有语言上的天赋,而这恰恰能帮我解决很多游戏服务器中的问题,想必每一个接触过erlang的人都看过轻松实现可伸缩性,容错性,和负载平衡的大规模多人在线系统,看完之后总有中跃跃欲试的冲动~ 这篇文章距今已经很久远了,但其中所描述的设计还是很实用的,erlang与game的结合这是一个非常好的参考资料,从对erlang的基础学习转变为研习源代码了。

 

这是一个系列文章,我会将从 openpoker 中所看所学所想记录下来,以便后续深入并参考~

 

有关openpoker项目的介绍,可以参考上文链接的文章,但那篇文章年代久远,作者早就悄无声息的更新了项目,文章中讲到的一些概念在新代码中没了踪影,看完了起个参考作用就成了,还是追着这个系列一点点的来看吧~

 

这个项目被作者放到了github上,一直有更新,但作者将开源协议变成了禁止商用。猛击此处你可以找到项目最新的源代码~

 

源码概况

 

首先看一下项目的目录结构,还是比较标准的erlang项目,doc目录有协议说明以及安装说明,src目录存放所有的源代码,我们首先要做的就是先大概看一下所有源代码~ 

 

光看源代码的名字就知道server.erl这个文件不简单,非常重要,另外要想理解这个项目exch.erl与game.erl还有g.erl这三个文件的组合也是理解的要点。

 

启动服务器

 

作者将Emakefile放到了src目录,个人感觉很不舒服,将此文件放到了项目根目录,并重写了此文件

 

 

{'src/limit',[debug_info, {outdir, "ebin"}]}.
{'src/exch',[debug_info, {outdir, "ebin"}]}.
{'src/*',[debug_info, {outdir, "ebin"}]}.

 

 

这就是erlang的make文件,会根据源文件的日期进行比较进行编译,首先要理解为什么先编译 limit和exch两个模块,因为这是作者实现的两个自定义OTP模块,可以理解为OO语言中的Interface,后续的编译需要用到这两个模块。

 

不出意外在项目的根目录执行下列名就可以顺利编译项目了, 其中会有一些未使用的方法Warnning出现,那些都是作者用于对服务器进行控制预留的,不用理会。

 

 

$> erl -make

 

 

编译成功开始运行服务器,注意编译成功后一定要将目录切换到ebin目录中

 

 

$> erl -sname test

 

 

启动后按照doc/install中的说明需要先初始化数据库表,随后即可启动服务器

 

 

erl > schema:install().
erl > server:start("127.0.0.1", 8002)

 

 

至此一个扑克游戏的服务器以及运行起来了,客户端与8002端口通信即可。

 

首篇先到这里,之后我会更多的涉及对源码的思考与分析~

 

 

分享到:
评论

相关推荐

    java开源项目源代码-java开源项目源代码.zip

    java开源项目源代码_java开源项目源代码.zip

    Android代码-Android 优秀开源项目实现原理解析

    本工程主要用于 Android 优秀开源项目实现原理解析 的 Demo 代码托管 添加规范 各项目需要新建一个属于自己的文件夹,用于后续上传该开源库使用示例工程代码 该文件夹以开源库名-demo命名,全小写,单词间用-连接...

    JAVA上百实例源码以及开源项目源代码

    JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个目标文件 摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很...

    开源项目源代码,学习自取

    开源项目源代码是IT行业中一个极其重要且富有价值的学习资源,尤其对于软件开发人员和编程爱好者来说,它们提供了深入理解编程技术、设计模式以及最佳实践的机会。这些代码库通常是免费提供的,鼓励用户自行研究、...

    trdp open开源项目源代码

    TCNOPEN是一个铁路行业相关的合作伙伴创建的开源的倡议,其目的是建立一些新的或即将出台的铁路标准的关键部分,通常以TCN命名。 TCN(列车通信网络)是IEC(国际电工委员会)第43工作组制定的一系列国际标准(IEC...

    开源中国项目源代码

    本项目源代码是开源中国针对Android平台开发的应用程序,旨在为用户提供一个互动的、便捷的开源资讯获取和交流平台。通过下载并研究这个源代码,开发者尤其是Android初学者能够深入理解Android应用的开发流程,提升...

    金山开源源代码 金山开源源代码

    【金山开源源代码详解】 金山开源源代码是金山软件公司对外公开的部分软件源代码,旨在促进技术交流与合作,推动技术创新。开源意味着开发者可以查看、使用、修改和分发这些代码,遵循特定的开源许可协议。金山软件...

    区块链服务器端demo版本开源项目源代码

    区块链服务器端demo版本开源项目源代码,可供参考,谢谢

    Silverlight商业网站开源项目源代码

    Silverlight商业网站开源项目,项目使用Silverlight特性制作商业网站,体现RIA应用的强大和绚丽。 项目为开源项目,可以随意修改和传播。 在线演示地址:...

    android开源项目源码,完整商城项目源码(服务端+客户端)

    在Android开发中,开源项目意味着其源代码对公众开放,允许开发者查看、学习、修改甚至分发。这种开放性为开发者提供了深入理解项目设计和实现的机会,有助于提升个人技能,并且可以借鉴优秀的设计模式和最佳实践。...

    C# MES_开源源代码

    【C# MES 开源源代码详解】 C# MES(Manufacturing Execution System,制造执行系统)是基于C#编程语言开发的一款开源软件,旨在为企业提供生产流程的实时监控与管理。MES系统通常位于ERP(企业资源规划)系统和...

    C#中最强大的开源软件源代码

    **C#中最强大的开源软件源代码——探索SharpDevelop** SharpDevelop是一个专为.NET Framework设计的开源集成开发环境(IDE),它的源代码对于学习C#编程和理解IDE开发有着极高的价值。这个开源项目展示了如何利用C#...

    如何阅读源代码,开源项目

    "如何阅读源代码,开源项目" 在本文中,我们将讨论如何阅读源代码,通过一个开源项目的例子来进行讲解。阅读源代码是程序员不可或缺的一项技能,无论是为了学习编程方法,还是为了提高自己对大规模源代码的把握能力...

    svg图片图标解析开源代码

    2. 将SVGPP的源代码复制到你的项目文件夹,或者通过CMake构建系统将SVGPP作为子模块引入。 3. 配置项目设置,链接到Boost库(通常包括`boost_system`、`boost_filesystem`等组件)。 4. 引入必要的SVGPP头文件,例如...

    免费开源网校系统源代码轻松搭建在线教育平台

    "免费开源网校系统源代码轻松搭建在线教育平台" 这个标题表明,这是一个关于教育技术(EdTech)领域的项目,特别强调了“免费”和“开源”,意味着用户可以免费获取并拥有对源代码的完全访问权,可以根据自身需求...

    开源项目OpenDivX源代码包-源码

    开源项目OpenDivX源代码包-源码 开源项目OpenDivX源代码包-源码

    Java项目开源源码,共111个

    "Java项目开源源码,共111个" 本资源提供了111个Java项目的开源源码,涵盖了各种Java项目类型,包括Web开发、移动应用开发、桌面应用开发等。这些源码可以作为学习Java编程的参考资源,也可以作为实际项目开发的...

    Python爬虫开源项目代码

    Python爬虫开源项目代码是学习和实践Python网络爬虫技术的重要资源。这些开源项目提供了丰富的示例和实践经验,涵盖了各种爬虫技术的应用场景,对于初学者和进阶者都有很大的帮助。下面将详细阐述Python爬虫相关的...

    itext 源代码(PDF处理、解析开源库)

    iText源代码的版本是2.1.3,这个版本在当时已经非常成熟,被广泛应用于各种项目中。在iText-src-2.1.3.zip压缩包中,主要包含的是Java源代码,供开发者学习和定制。 1. **PDF创建**: iText 可以帮助开发者从头...

    OR1200开源CPU源代码分析

    《OR1200开源CPU源代码分析》 在当今的计算机硬件领域,开源硬件项目逐渐受到关注,OR1200开源CPU便是其中之一。它以其开放的设计理念、高效的性能和灵活的应用,吸引了众多硬件爱好者和专业人士进行研究与开发。本...

Global site tag (gtag.js) - Google Analytics