Pomelo Nodejs 常见问题集

Pomelo Nodejs 常见问题集

##导言## 基本上把pomelo 在github上 两个issue repo 全部看完(442) pomelo-cn pomelo 顺便吐槽一下貌似大家都不知道pomelo-cn? 发现一些新的中文issue 都是来自于pomelo…我觉得这样老外很伤心…呵呵…挑选了一下个人觉得有代表性的问题,因为纯粹是我个人评价,所以,欢迎你提供有价值的issue…

= ##Connector## ####客户端是否可以连接area服务器 ####

####關於pomelo的一點疑惑 ####

##SessionService##

####sessionService 多connector 踢session用户策略####

####有没有文档具体解释localSessionService和sessionService?####

####建议在session上增加notify方法####

####关于msgRemote.js中Remote.prototype.forwardMessage函数的疑问####

####fail to send message by uid for session not exist####

####谁能帮我介绍一下 pomelo的session 用法?####

####关于api中的LocalSessionService,LocalSession,SessionService####

##RPC##

####RPC调用为何一定要传递session作为第一参数?####

####RPC调用耗时问题####

####关于IPC组件的设计####

##ChannelService##

####对于channelService的问题####

##Socket##

####如果想设置keepAlive和Nodelay在哪里设置呢?####

##Handler##

####指定default error handler####

####关于Pomelo的几个问题####

##模块##

####关于pomelo-robot使用,说一下感想 ####

####关于Lordofpomelo基于灯塔的AOI服务的疑问####

####几个关于admin和monitor的问题及建议####

####关于lordofpomelo中的灯塔的疑惑 ####

##客户端## ####android 客户端老是出现下面错误,java就没事####

##其他##

####咨询一下网易Pomelo团队问题####

####请教关于游戏数据和游戏处理逻辑位置的问题 ####

####请问一下onUserLeave.bind(null, self.app)是什么意思 ####

####基于某个服务器的全局变量 ####

####官方有没有提供多物理机部署的文档? ####

####还是关于游戏启动和得到所有在线玩家的问题####


6 回复

Pomelo Nodejs 常见问题集

导言

本文档收集了一些在使用 Pomelo 框架时常见的问题。这些问题来源于 GitHub 上的两个 issue 仓库(pomelo-cnpomelo)。为了帮助更多开发者理解和解决这些问题,本文档整理了部分有代表性的 issue,并提供了简短的解答和示例代码。


Connector

问题: 客户端是否可以连接 area 服务器?

解答: 是的,客户端可以通过配置连接到 area 服务器。Pomelo 提供了灵活的路由机制来确保请求被正确转发到对应的服务器。例如:

// server-side route configuration
app.getRouter().route('area', function(session, msg, app, cb) {
    // 选择一个 area 服务器进行路由
    cb(null, 'area-server-1');
});

SessionService

问题: 如何处理多个 connector 中的 session 用户踢出策略?

解答: Pomelo 的 SessionService 可以帮助管理会话。你可以通过监听事件来实现踢出策略。例如:

// server-side code
app.getHttpServer().on('connection', function(socket) {
    socket.on('disconnect', function() {
        var session = app.get('sessionService').get(socket.id);
        if (session) {
            // 处理踢出逻辑
            session.disconnect();
        }
    });
});

RPC

问题: 为什么 RPC 调用必须传递 session 作为第一个参数?

解答: 在 Pomelo 中,RPC 调用通常需要 session 参数来标识发起请求的客户端。这有助于实现更细粒度的权限控制和状态管理。例如:

// client-side code
client.request('rpcMethod', { param: 'value' }, { session: session }, function(err, data) {
    if (err) {
        console.error(err);
    } else {
        console.log(data);
    }
});

Socket

问题: 如何设置 keepAlive 和 Nodelay?

解答: 你可以在连接配置中设置这些参数。例如:

// client-side connection configuration
var socket = io.connect('http://localhost:3000', {
    transports: ['websocket'],
    reconnection: true,
    reconnectionDelay: 500,
    reconnectionAttempts: 10,
    timeout: 10000,
    forceNew: true,
    query: {
        keepAlive: 1,
        nodelay: true
    }
});

其他

问题: 什么是 onUserLeave.bind(null, self.app)

解答: 这是一个绑定事件处理器的方法,用于处理用户离开时的操作。例如:

// server-side code
app.getAdmin().on('userLeave', onUserLeave.bind(null, self.app));

function onUserLeave(app, user) {
    // 处理用户离开后的逻辑
}

以上是一些常见的 Pomelo 问题及其解决方案。希望这些解答能帮助你在开发过程中更好地使用 Pomelo 框架。如果你遇到其他问题,欢迎继续提出并参与到社区讨论中。


本人还写了一个pomelo 的入门教程

http://blog.gfdsa.net/tags/pomelo/

大赞!!!

###必须赞,感谢楼主###

不错啊~~~

Pomelo Node.js 常见问题集

Pomelo 是一个高性能、分布式的游戏服务器框架,广泛应用于实时多人游戏开发。本文档旨在收集并解答 Pomelo 中常见的问题,帮助开发者更好地理解和使用该框架。

Connector

问题: 客户端是否可以连接 area 服务器?

解答: 客户端需要通过 Pomelo 的 Connector 连接到 game 或者 area 服务器。你可以配置 Connector 来决定客户端连接到哪个服务器类型。例如:

// server.js
var app = require('pomelo').createApp();
app.set('connector', {
    serverType: 'area',
    connector: require('pomelo-connector'),
    handshake: true,
    heartbeats: true,
});

SessionService

问题: sessionService 多 connector 踢 session 用户策略

解答: SessionService 提供了多个 API 用于管理 session,包括踢用户。如果你有多个 connector,可以通过设置 kickOnDisconnect 属性来决定是否踢掉 session。示例代码如下:

// server.js
app.set('session', {
    kickOnDisconnect: true,
});

RPC

问题: RPC 调用为何一定要传递 session 作为第一参数?

解答: Pomelo 中的 RPC 调用需要传递 session,因为这有助于识别调用者的信息,如用户 ID 和上下文信息。虽然你可以自定义 RPC 调用方式,但通常建议保持这种设计以确保框架的功能完整性。

Socket

问题: 如何设置 keepAlive 和 Nodelay?

解答: 可以在配置文件中设置这些参数。例如,在 server.json 中添加以下配置:

{
    "connector": {
        "settings": {
            "keepalive": true,
            "tcpNoDelay": true
        }
    }
}

其他

问题: 官方有没有提供多物理机部署的文档?

解答: Pomelo 官方文档中有详细的部署指南。你可以参考官方文档中的“部署指南”章节来了解如何在多物理机上部署 Pomelo。链接如下:

部署指南

以上是 Pomelo 框架的一些常见问题及其解决方案。希望这些解答能帮助你在开发过程中遇到的问题。

回到顶部