Ascent 代码 World Server 通讯分析

本文分析了World Server如何与Logon Server建立通讯,包括启动过程、消息处理和验证机制。着重讨论了潜在的安全问题,如拒绝服务攻击的漏洞,并提出了改进方案。同时提到了客户端连接World Server的会话建立过程,以及在此过程中可能存在的安全风险,如恶意用户利用已登录账户进行会话劫持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

master.cpp 主线程中读取配置文件获得World Server 的监听IP与端口:

string host = Config.MainConfig.GetStringDefault( "Listen", "Host", DEFAULT_HOST );

int wsport = Config.MainConfig.GetIntDefault( "Listen", "WorldServerPort", DEFAULT_WORLDSERVER_PORT );

 

并有SocketMgr发起工作线程:

new SocketMgr;
sSocketMgr.SpawnWorkerThreads();

workersThreads完成异步I/O,采用完成端口的方式。

 

如果定义了启动远程控制,那么主线程会StartConsoleListener() 并将GetConsoleListener()返回的

ListenSocket<ConsoleSocket> * g_pListenSocket 传递给线程池。

 

在没有定义CLUSTERING 的情况下,World将会连接至Logon Server 也就是Realmlist所在的服务器,建立通讯:

 

new LogonCommHandler();

sLogonCommHandler.Startup();

 

此外还需要监听端口,以获得客户端的连接,监听IP与端口在配置文件中获得,见文章开头。

ListenSocket<WorldSocket> * ls = new ListenSocket<WorldSocket>(host.c_str(), wsport);

bool listnersockcreate = ls->IsOpen();

if( listnersockcreate )

ThreadPool.ExecuteTask(ls);

 

 

 

先讲与Logon Server的通讯,通讯模块在LogonCommClient.cpp.h 中完成。

其中void LogonCommClientSocket::OnRead()在读到消息后将转交给

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值