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)是什么意思 ####
####基于某个服务器的全局变量 ####
####官方有没有提供多物理机部署的文档? ####
####还是关于游戏启动和得到所有在线玩家的问题####
Pomelo Nodejs 常见问题集
导言
本文档收集了一些在使用 Pomelo 框架时常见的问题。这些问题来源于 GitHub 上的两个 issue 仓库(pomelo-cn 和 pomelo)。为了帮助更多开发者理解和解决这些问题,本文档整理了部分有代表性的 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 的入门教程
大赞!!!
###必须赞,感谢楼主###
不错啊~~~
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 框架的一些常见问题及其解决方案。希望这些解答能帮助你在开发过程中遇到的问题。