找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 14541|回复: 5

【求助】如何实现ACE服务器同时只允许一个客户端接入

[复制链接]
发表于 2013-5-17 09:03:19 | 显示全部楼层 |阅读模式
本帖最后由 zzappler 于 2013-5-17 09:13 编辑

背景:
ACE服务器功能,使用一个ACE_Event_Handler派生的acceptor类接收对象
===割===
如果ACE服务端同时只允许一个客户端接入的话,应该在哪里限制?
acceptor.handle_input()函数中是否可以进行限制?

求大侠帮忙解决{:soso_e117:},多谢;



发表于 2013-5-17 18:57:20 | 显示全部楼层
存储一下客户链接的信息,有新链接的时候,判断IP:Port,如果发现已经存在,直接拒绝。

点评

要是客户端Port一般是任选的吧,当前客户端是任意接入的; 当前用了一个比较折中的办法,好像也不太好; accept 接入一个TCP连接后, 在 handle_input中执行 cancel_wakeup, 断开TCP完成后执行 schedule_wakeup 不  详情 回复 发表于 2013-5-20 09:07
 楼主| 发表于 2013-5-20 09:07:51 | 显示全部楼层
winston 发表于 2013-5-17 18:57
存储一下客户链接的信息,有新链接的时候,判断IPort,如果发现已经存在,直接拒绝。 ...

要是客户端Port一般是任选的吧,当前客户端是任意接入的;

当前用了一个比较折中的办法,好像也不太好;
accept 接入一个TCP连接后, 在 handle_input中执行 cancel_wakeup, 断开TCP完成后执行 schedule_wakeup
不知道有没有问题?
:(
发表于 2013-5-20 10:15:38 | 显示全部楼层
这里,首先你要定义一下,什么是唯一的客户,如何识别,才能谈得上怎么在技术上处理。
发表于 2013-6-4 15:22:38 | 显示全部楼层
可以考虑在make_svc_handler的地方做判断来确认是否接受该链接~ACE_Asynch_Acceptor的话还有validate_connection可以用
至于如何标示‘唯一’就是协议层的问题了
发表于 2014-2-20 15:02:36 | 显示全部楼层
    楼上说的对,make_svc_handler是ACE_Acceptor的成员,主要用来创建处理器对象,重载它一般是用来做对象池或单例的,也可以用来根据连接对象个数拒绝新连接。楼主没有必要自己从ACE_Event_Handler派生acceptor类,直接使用ACE_Acceptor做基类就挺好,不过底层的机制是一样的,就是在handle_input中判断连接要不要接受。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 10:50 , Processed in 0.021031 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表