Nodejs 网易开源游戏框架pomelo,源码解读

Nodejs 网易开源游戏框架pomelo,源码解读

地址:http://golanger.cn/ 有兴趣的看看。

21 回复

当然可以。以下是对“Nodejs 网易开源游戏框架pomelo,源码解读”的帖子内容进行补充和扩展:


Node.js 网易开源游戏框架 Pomelo 源码解读

Pomelo 是由网易开源的一款基于 Node.js 的高性能、分布式的游戏服务器框架。它提供了一整套解决方案来处理网络通信、负载均衡、集群管理等问题。下面我们将从几个方面来解析 Pomelo 的核心组件及其工作原理。

安装与初始化

首先,你需要安装 Node.js 和 npm(Node Package Manager)。接下来,你可以使用 npm 来安装 Pomelo:

npm install pomelo -g

然后,创建一个新的 Pomelo 应用程序:

pomelo init mygame
cd mygame
npm install

这将生成一个基本的应用结构,并安装所需的依赖项。

核心概念

1. Server 和 Client

Pomelo 的架构分为两部分:服务端(Server)和客户端(Client)。服务端主要负责处理逻辑和数据存储,而客户端则负责用户界面和交互。

示例代码:启动服务端

// app.js
var app = require('pomelo').createApp();
app.set('port', process.env.PORT || 3000);
app.use(pomelo.httpGate());
app.configure('development', function() {
  app.set('proxy', true);
});
app.start();

2. 通信协议

Pomelo 使用自定义的 JSON 协议来实现服务端和客户端之间的通信。这种协议支持事件驱动的编程模型,使得开发更高效。

示例代码:客户端发送消息

// client.js
var pomelo = require('pomelo');
pomelo.init({
  host: 'localhost',
  port: 3000,
  logLevel: 'debug'
}, function() {
  pomelo.request('connector.entryHandler.entry', {uid: '123'}, function(data) {
    console.log(data);
  });
});

3. 路由机制

Pomelo 提供了灵活的路由机制,可以根据不同的业务需求将请求分发到不同的处理模块。路由规则可以通过配置文件动态调整。

示例代码:配置路由

// app.json
{
  "routers": [
    {"router": "app.router.route", "type": "all"}
  ]
}

4. 插件系统

Pomelo 还提供了一个强大的插件系统,允许开发者根据需要添加或移除功能模块。这使得框架具有很高的可扩展性和灵活性。

示例代码:加载插件

// app.js
app.configure('production|development', function() {
  app.use(pomelo.plugins.cache());
});

通过上述分析,我们可以看到 Pomelo 框架不仅提供了丰富的功能,还具有良好的可扩展性。希望这些示例代码能帮助你更好地理解和使用 Pomelo 框架。


如果你对更多细节感兴趣,可以参考 Pomelo 官方文档 或者访问 Pomelo GitHub 仓库 获取更多信息。


顶!!!

看了下 API,都是后台的服务。和 game 的关系好像不大。楼主展开说说?

http://pomelo.netease.com/api.html

pomelo是什么,最好的解答: 深入浅出node.js游戏服务器开发1——基础架构与框架介绍 http://www.infoq.com/cn/articles/game-server-development-1 深入浅出Node.js游戏服务器开发–分布式聊天服务器搭建 http://www.infoq.com/cn/articles/game-server-development-2 好文还在陆续更新。

看了录像,后台的服务器协调工作很不错。

新增一篇:pomelo 源码阅读(八) http://golanger.cn/?p=836

新增一篇:pomelo 源码阅读(九) http://golanger.cn/?p=880

咱的demo能不能精致一些 走起路来一会大一会小 browserquest.mozilla.org 国外的demo做的很出色

刚开始,慢慢会好的~ pomelo 源码阅读(十) http://golanger.cn/?p=894

pomelo 源码阅读(十一) http://golanger.cn/?p=1007

顶顶, 谢谢深入关注

我看了一下,性能测试里面说在那个配置下,

最后,我们对服务器进行了用户为期三天的稳定性能测试,在线用户分别为400,600,800并发操作,运行基本正常。下面是运行400个并发操作的系统整体资源使用情况。

这是说稳定性最好要控制人数在这个范围内,再往上就不稳定?还是说这个400,600,800只是随意拿来的一个测试用数字?

嗯,有理,有些文档review得不够细,我们0.3版出来后会重新做压力测试

谢谢鼓励

期待这个版本

顶一下

建议转到 [pomelo club][1]

[1]: http://nodejs.netease.com 上面去哈

链接打不开了

当然可以。网易的Pomelo是一款用于构建实时 multiplayer 游戏服务器的高性能 Node.js 框架。以下是关于Pomelo的一些源码解读:

Pomelo 源码结构

  1. app.js: 这是应用的入口文件。它主要负责初始化整个应用,加载配置,并启动应用。

    // app.js 示例代码
    const app = require('pomelo').createApp();
    app.set('name', 'myapp');
    app.load(config, function(err) {
        if (err) {
            console.error('failed to load application', err.stack);
            process.exit(-1);
        }
        app.start();
    });
    
  2. config.json: 这个文件包含了应用的各种配置信息,例如端口号、数据库连接信息等。

    // config.json 示例代码
    {
        "connector": {
            "port": 3014,
            "host": "localhost"
        },
        "database": {
            "type": "mysql",
            "host": "localhost",
            "user": "root",
            "password": "password",
            "database": "pomelodb"
        }
    }
    
  3. routes.js: 这个文件定义了客户端请求到服务端的路由,即如何将请求分发给不同的处理函数。

    // routes.js 示例代码
    module.exports = function(app) {
        return {
            'gate.gateHandler.queryEntry': function(msg, session, next) {
                app.rpc.frontend.entryHandler.queryEntry(session, msg, next);
            }
        };
    };
    
  4. handlers.js: 这里定义了处理客户端消息的具体逻辑。

    // handlers.js 示例代码
    module.exports = function(app) {
        return {
            hello: function(msg, session, cb) {
                cb(null, { code: 200, msg: 'hello world' });
            }
        };
    };
    
  5. app.js 中的 app.start() 方法:

    • 这个方法启动应用并监听指定端口。当收到客户端连接时,会调用相应的处理函数。
    // app.js 示例代码(续)
    app.on('serverStarted', function(serverId) {
        console.log('[%s:%d] server start, id=%s', app.get('host'), app.get('port'), serverId);
    });
    

以上是对Pomelo框架的一些基本解读。如果你对特定部分有更多的疑问,或者想了解更深入的细节,欢迎继续探讨。

回到顶部