Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Discussion options

项目上线一段时间后,突然出现loginapp无法再提供登录服务的问题。
分析后发现loginapp没有崩溃,而是initProgress_被设成了0,导致所有的登录请求都会被拒绝并返回SERVER_ERR_SRV_STARTING。后来跟踪代码,发现是由客户端发出的消息,被处理成调用Loginapp::onBaseappInitProgress后,把initProgress_置为0导致的。于是在Loginapp::onBaseappInitProgress中加入禁止把initProgress_改小的代码后让问题暂时解决。
后来分析发现这个客户端应该是正常操作,因为之前录到过很多该客户端正常登录的日志,在loginapp启动过程中,该客户端每隔几秒钟就一直向loginapp发hello请求。只是突然最后一次的请求,服务器并没有处理成调用hello而是调用了onBaseappInitProgress。如果从安全性的角度出发,先不考虑loginapp为何收到了错误的数据包,如果在收到了错误的数据包后,有什么措施可以保证不发生此类灾难性的调用?比如能否在消息处理层,增加权限的管理,有些消息只允许在集群内发送?

You must be logged in to vote

Replies: 6 comments · 9 replies

Comment options

知道具体是什么原因吗

You must be logged in to vote
5 replies
@Solidgearnail
Comment options

还没有去查,而且不容易重现,可能只能在本地使用bots模拟大量登录来看看能否重现了。

@kebiao
Comment options

kebiao Mar 6, 2021
Collaborator

可以重现一下

@magic-mgq
Comment options

在成功连接到login但是没有成功登录到Baseapp,客户端发送Baseapp_logoutBaseapp就会出现这个情况。Baseapp_logoutBaseapp和onBaseappInitProgress的msgID都是24,导致login的Network::MessageHandler* pMsgHandler = pMsgHandlers->find(currMsgID_);
找到了onBaseappInitProgress然后设置了一个垃圾值。

@huhubis
Comment options

这个修改推上来?

@weiwsy
Comment options

onBaseappInitProgress的msgID都是24

你说的这个onBaseappInitProgress的msgID是24,是在那个代码看到的?我只找到Baseapp_logoutBaseapp的msgID 实在插件端定义的。

Comment options

谢谢分享

You must be logged in to vote
0 replies
Comment options

You must be logged in to vote
0 replies
Comment options

You must be logged in to vote
1 reply
@weiwsy
Comment options

谢谢,就是看到你说他的消息ID也是24导致了冲突, 所以想求证下我当前下载的2.5.12是否也存在。我也遇到过一次类似的情况,但是没有追究他。 这问题如果要解决, 用题主的 不允许progress变小,应该就可以解决,但是最好的方法还是解决冲突的地方。

Comment options

You must be logged in to vote
1 reply
@weiwsy
Comment options

2.5.12有这个判断代码(如下),这么说,我遇到的无法登录问题可能不是这个地方导致的,当时用的bot测试,无法登录后,把bot都关掉,其他就能登录了。

你说那个onBaseappInitProgress消息ID=24, 应该是你在某个前台或者服务端代码看到了这个24吧,能否告知我具体的在哪个文件,哪个位置?我找不到,也就无从判断了。

void Loginapp::onBaseappInitProgress(Network::Channel* pChannel, float progress)
{
if(pChannel->isExternal())
return;

if(progress > 1.f)
{
	INFO_MSG(fmt::format("Loginapp::onBaseappInitProgress: progress={}.\n", 
		(progress > 1.f ? 1.f : progress)));
}


initProgress_ = progress;

}

Comment options

想找一款成熟的手游产品源码过来我们深度二次开发(全新换套美术,代码也都从新货混淆及优化整一遍)。意向最好是重度的mmo、arpg、角色扮演或动作手游,其他类型的游戏也可以,必须是高品质大厂近5年内做的产品,国内厂商或国外厂商开发的都可以,产品不能在国内运营过的。可以在国外运营过或运行中。准备了足够夸张的米给到你。如朋友那边有可以给推荐一下有米,不墨迹,鹅浩809996677。

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
9 participants
Morty Proxy This is a proxified and sanitized view of the page, visit original site.