大家说说用什么方法来保存已连接的用户。要考虑到用户断开时要能删除这个节点。如果用Tlist保存的话,做得不好在删除节点时就要每一个用户地查找,然后才能删除这节点。如:
TClient=class
Athread:TIdPeerThread;
Username:string[20];
var
online=Tlist;procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread);
var
i:integer;
username:string;
begin
for i:=0 to online.count-1 do
begin
if Tclient(online.items[i]).Athread=Athread then online.items.delete(i);
exit;
end;
end;
这种方法如果用户多的情况下,严重映响效率。大家来谈谈什么更好的方法。比如用athread.data保存当前记录在列表中的地址。可以不用像这样每次删除操作都要对表查询一次的?
TClient=class
Athread:TIdPeerThread;
Username:string[20];
var
online=Tlist;procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread);
var
i:integer;
username:string;
begin
for i:=0 to online.count-1 do
begin
if Tclient(online.items[i]).Athread=Athread then online.items.delete(i);
exit;
end;
end;
这种方法如果用户多的情况下,严重映响效率。大家来谈谈什么更好的方法。比如用athread.data保存当前记录在列表中的地址。可以不用像这样每次删除操作都要对表查询一次的?
NickName,
Password,
State: string;
AdminLevel,
Fame,
Exp,
UserLevel,
Right: integer;
AvailDate: TDateTime;
Online: Boolean;
Socket: TCustomWinSocket;
DateTime: TDateTIme;
IPAddress: string;
end; Users: array[1..500] of TUser;希望这个标准的在线用户库设计对你有所帮助,虽然这里是用的是 ServerSocket