关于UDP服务器端的设计问题。(200分)

  • 主题发起人 主题发起人 不困
  • 开始时间 开始时间

不困

Unregistered / Unconfirmed
GUEST, unregistred user!
想做一个UDP服务器端程序,原本设计使用数据库存取在线好友列表,后考虑同时在线用户增加后服务器端程序
负担过重,遂考虑放弃。
现考虑制作具有处理UDP消息功能的服务器端,问题如下。
1、服务器端如何获取用户好友列表信息?是通过接收客户端登陆后发送的消息自动生成吗?
2、获取用户在线好友信息之后以何种方式动态的存储在服务器端较为妥当?原考虑使用二维数组,
但因无法动态释放数组导致无限数组增大而放弃。
3、初步设想将好友信息存放在本地文件或本地数据库中,像QQ一样只有第一次登陆或通过注册向导之后才从数
据库中获取信息,以减轻服务器端负担,有何问题?
 
我觉得应该是在服务器端保存用户的好友列表
用户上线后,查找该用户的好友列表,将在线好友的信息发送过去,客户端每隔几分钟
向服务器查询一次再现好友的状态,如果某个用户下线,则向该用户的所有好友发送信息
 
想要听到更具体点的指教。
 
http://free.zhibo.net/gujie.zhibo.net
 
很感谢abc_xp,但我仍然很想知道服务器端的工作原理以及消息处理。。
 
1:同意楼上的观点
2:对于用户列表,我建议专门用一个TList来保存,最好是用一个类来包装一下,简化
操作。。。
3:在本地上放一部分数据,做个记号,在服务器上放所有的数据,登陆的时候检查数据
的版本号,如果不付才下新数据。。。
 
哎呀呀~终于见到你无忌大哥的身影了。
关于第一点还有些疑问需要确认,用户登陆时只能够发送本用户的所有好友信息(也只能这样),
然后根据服务器端的用户列表逐个查询各用户是否在线,生成在线用户,是这样吗?
这个TList类型正是我想要找的!太感谢了!你说的类包装该怎样实现?
这样的话服务器端根本就不需要和数据库打交道了对吧?
 
在设计过程中遇到两问题,请各位帮忙解决。。
完毕马上放分。。
1、客户端每隔10秒发送验证在线数据至服务器端,以证明在线。
如果超过30秒未发送此数据,则服务器端判定此客户端为断线并删除此客户端的在线信息。
请问服务器端如何以消耗资源最小的方式来处理此事件?
2、
type
UserInfo= record
Username:string[20];
UserIP:string[20];
end;
pUserInfo=^UserInfo;

var
pUser:pUserInfo;
UserList:tlist;
procedure FormCreate(Sender: TObject);
new(puser);
puser.Username:='Good';
puser.userip:='192.168.0.1';
UserList := TList.Create;
userlist.Add(puser);

现在我想根据单单一个username(唯一),如何最便捷找到这个username在userlist的第几项?
可以采用indexof吗?或者用户信息考虑用类的方式存储在tlist中。

以上两个问题不推荐或尽量减少采用循环历遍的方式,
因为那样用户量增多的话可能服务器端承受不了。
~谢过。。
无忌大哥有没有好的方法,请赐教。
感激不尽。。


 
现在我想根据单单一个username(唯一),如何最便捷找到这个username在userlist的第几项?

对userlist使用indexof(username)能得到该username在userlist中的序号,
不过要注意,该序号是从0开始的。
 
userlist中存储的是record指针,不是字符串或别的什么。。
 
那就用TList来保存,
 
后退
顶部