网络部署结构

我们先看一下Pomeloserver网络部署情况,直接上图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3RiaW56aQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

Pomeloserver端框架简单地可分为两层。即链接层(Connector、Gate)和服务层(Logic、Master),也叫前端server(frontend server)和后端server(backend server)。

链接层直接与client进行网络通信,client的请求通过链接层转发到服务层的Logic进行处理,处理完后将结果交由Connector转发给client。

这种结构能够方便我们进行server扩展,特别是负责均衡。

须要特殊说明的是Gate和Master。client第一次请求是发到Gateserver,然后由Gateserver为client分配一个Connectorserver,详细的分配策略是程序可控的。Master主要负责server管理,如新开server、关闭server。

因为Logicserver能够有多个,client发送请求时就须要告诉Connector消息须要发送到哪个Logicserver上。为此Pomelo引入了路由(Route)机制。即client全部的消息须要指定路由信息。一边消息正确投递。

Logicserver按功能可划分为不同的server。如场景server、聊天server、用户信息管理server等,那么不同server之间难免须要进行通信,为此Pomelo引入了RPC机制。即全部逻辑server之间的通信能够通过RPC调用来完毕,这样就非常方便了。

文件夹结构及其配置文件

Pomeloserver框架是强依赖于脚本文件夹结构的。即server端某些文件夹尤其特殊功能定义,详细例如以下图:



当中,橙色 部分的文件夹结构是Pomelo框架规定的。蓝色部分是Node.js规定的,绿色部分是使用者定义并能够被Pomele框架依照一定规则读取的。


对部分文件夹做对应说明例如以下:

./game-server 这个文件夹是通过pomelo init命令创建项目后生成的。全部的游戏服务器相关的代码和配置文件都将放在这个里面

./game-server/app 用于放置服务器端代码文件

./game-server/app/servers 用于放置虚拟服务器代码,这个文件夹是pomelo依赖的,当我们在配置文件里指定了开启某某服务器时,pomelo会到这个文件夹以下找到名字与其相应的文件夹,然后找该文件夹下相应的handler、remote、filter文件夹下的js代码文件,并运行。

./game-server/app/servers/服务类型名称/handler 用于放置处理用户请求(基于Route的用户请求,服务器名称和handeler文件夹下的js文件名都将作为Route的一部分)的代码文件

./game-server/app/servers/服务类型名称/remote 用于放置处理服务器间调用(RPC调用)的代码文件

./game-server/app/servers/服务类型名称/filter 用于放置处理filter逻辑(包含before和after)的代码文件

./game-server/logs 用于存放日志文件

./game-server/app.js 服务器程序启动入口文件,能够在这个文件中面对Pomelo框架进行对应的配置设置,详细方法參见下一节介绍。

./game-server/config 用于放置配置文件,包含Pomelo框架的配置文件,第三方插件的配置文件。以及用户自己定义的配置文件(建议在该文件夹下将对应文件夹来存储用户自己定义配置文件。这样不至于太乱)

./game-server/config/master.json Master服务器使用的配置文件

./game-server/config/servers.json 也是给Master用的,用于定义server集群开启,如某某硬件server上开启某某游戏server

./game-server/config/log4js.json 日志配置

./game-server/config/serverProtos.json 待研究

./game-server/config/adminUser.json 待研究

./game-server/config/dictionary.json 用于定义Route压缩的字典配置文件


Pomelo框架设置

框架设置的实现途径有两种,一是通过上述的配置文件,二是通过Application.set()方法。

关于能够使用Application.set()方法进行设置的Pomelo框架參数,可參见下图


參考资料:

Pomelo框架概述 https://github.com/NetEase/pomelo/wiki/pomelo%E6%A1%86%E6%9E%B6%E6%A6%82%E8%BF%B0

Pomelo消息压缩 https://github.com/NetEase/pomelo/wiki/%E6%B6%88%E6%81%AF%E5%8E%8B%E7%BC%A9


./game-server/logs 用于存放日志文件
./game-server/app.js 服务器程序启动入口文件,能够在这个文件中面对Pomelo框架进行对应的配置设置。详细方法參见下一节介绍。

[叁]Pomelo游戏server编程分享 之 server结构与配置分析的更多相关文章

  1. SQL Server编程系列(1):SMO介绍

    原文:SQL Server编程系列(1):SMO介绍 续篇:SQL Server编程系列(2):SMO常用对象的有关操作 最近在项目中用到了有关SQL Server管理任务方面的编程实现,有了一些自己 ...

  2. (转) SQL Server编程系列(1):SMO介绍

    最近在项目中用到了有关SQL Server管理任务方面的编程实现,有了一些自己的心得体会,想在此跟大家分享一下,在工作中用到了SMO/SQL CLR/SSIS等方面的知识,在国内这方面的文章并不多见, ...

  3. [转]SQL Server编程:SMO介绍

    转自:周公 最近在项目中用到了有关SQL Server管理任务方面的编程实现,有了一些自己的心得体会,想在此跟大家分享一下,在工作中用到了SMO/SQL CLR/SSIS等方面的知识,在国内这方面的文 ...

  4. Oracle与SQL SERVER编程差异分析(入门)

    网上有关Oracle与SQL SERVER性能差异的文章很多,结论往往是让你根据数据量与预算来选择数据库.但实际项目中,特别是使用 .Net 开发的系统,支持以上两种数据库或者更多已经成为Boss的普 ...

  5. 分享Windows Server 2012 R2的获取正版密钥方法

    然后使用“我有ISIC卡”验证,目前可用号码:S420546009858. 分享Windows Server 2012 R2的获取正版密钥方法. 首先登陆dreamspark注册一个账号https:/ ...

  6. 跨平台网络通信与server编程框架库(acl库)介绍

    一.描写叙述 acl project是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的网络通信库及server编程框架,同一时候提供很多其它的有用功能库.通过该库 ...

  7. SQL Server编程系列(2):SMO常用对象的有关操作

    原文:SQL Server编程系列(2):SMO常用对象的有关操作 在上一篇周公简单讲述了SMO的一些基本概念,实际上SMO体系结构远不止周公在上一篇中讲述的那么简单,下图是MSDN上给出的一个完整的 ...

  8. .NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1)

    原文:.NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1) 一.SQL Server 为什么要与CLR集成 1. SQL Server 提供的存储过程.函数 ...

  9. SQL Server 编程入门

    一.T—SQL 的组成 1.DML(数据操作语言 Data Manipulation Language) 查询.插入.删除和修改数据库中的数据.SELECT.INSERT.UPDATE.DELETE ...

随机推荐

  1. 怎样在Android.mk上加宏定义【转】

    本文转载自:http://blog.csdn.net/ttxgz/article/details/7591282 很简单, LOCAL_CFLAGS += -DWHATEVERDEFINE 就可以了

  2. 分析AWR报告

    1.AWR报告头信息 DB Name :数据库名字 DBid: 数据库id Elapsed:采样时间段 DB Time:用户操作花费的时间,不包括Oracle后台进程消耗的时间 DB Time远小于E ...

  3. css3 animate基本属性

    Css3animate属性 属性 描述 Css Animation 所有动画属性的简写属性,除了animation-play-state属性 Animation:name duration timin ...

  4. 29. Divide Two Integers[M]两数相除

    题目 Given two integers dividend and divisor, divide two integers without using multiplication, divisi ...

  5. netcore发布到centos 验证码Zkweb.system.drawing不显示及乱码的问题

    netcore发布到centos 使用的是Zkweb.system.drawing生成验证码,发布后可能会出现不显示及乱码的情况 1.验证码图片不显示(通过日志会发现生成图片时代码已经异常) Zkwe ...

  6. merge into语句的使用

    merge语法是根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入. 其基本语法规则是 merge into 目标表 a using 源表 b on(a.条件字段1=b.条件字段1 and a ...

  7. javascript中的原型对象

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. python 编码问题解决方案

    1.UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128) ...

  9. 在YII2中使用memcached

    一.在本地安装Memcached服务器和安装memcached扩展 http://www.cnblogs.com/songziqing/p/5896742.html http://www.cnblog ...

  10. java必备技能

    Android应用程序开发是以Java语言为基础的,所以需要有扎实的Java基础知识.首先熟悉java基本语法,然后熟悉设计模式等. a) Java基础语法:看下面的<Java知识点列表> ...