datasnap 如何监控客户端的连接情况
2015-01-20 13:34
381 查看
如果客户端是TCP/IP是短连接的情况就没有必要了。
type pClientConns = ^TClientConns; // 客户连接 TClientConns = record clientid: integer; ip: string; port: string; logintime: TDateTime; end; type G_ClientConnects: TDictionary<TIdTCPConnection, pClientConns>; // 客户端连接字典 procedure TServerContainer1.DSTCPServerTransport1Connect (Event: TDSTCPConnectEventObject); var p: pClientConns; begin try if G_ConnnectCount >= G_MaxConnNum then begin LogInfo('已超过系统授权的客户连接数'); TIdTCPConnection(Event.Connection).Disconnect; exit; end; InterlockedIncrement(G_ConnnectCount); New(p); if Assigned(p) then begin p^.clientid := Event.Channel.ChannelInfo.Id; p^.ip := Event.Channel.ChannelInfo.ClientInfo.IpAddress; p^.port := Event.Channel.ChannelInfo.ClientInfo.ClientPort; p^.logintime := Now; G_ClientConnects.Add(TIdTCPConnection(Event.Connection), p); PostMessage(Application.MainForm.Handle, WM_ADDUSER, wParam(p), lParam(TIdTCPConnection(Event.Connection))); end; except exit; end; end; procedure TServerContainer1.DSTCPServerTransport1Disconnect (Event: TDSTCPDisconnectEventObject); var p: pClientConns; begin try if G_ConnnectCount >= 1 then InterlockedDecrement(GlobalVar.G_ConnnectCount); p := G_ClientConnects.Items[TIdTCPConnection(Event.Connection)]; if Assigned(p) then begin SendMessage(Application.MainForm.Handle, WM_DELUSER, wParam(p), 0); G_ClientConnects.Remove(TIdTCPConnection(Event.Connection)); end; except exit; end; end; procedure Tf_MainForm.AddUser(var msg: TMessage); var p: pClientConns; begin try Label4.Caption := IntToStr(G_ConnnectCount); p := pClientConns(msg.WParam); if Assigned(p) then begin ClientDataSet1.Append; ClientDataSet1.FieldByName('id').AsInteger := p^.clientid; ClientDataSet1.FieldByName('ip').AsString := p^.ip; ClientDataSet1.FieldByName('port').AsString := p^.port; ClientDataSet1.FieldByName('time').AsDateTime := p^.logintime; ClientDataSet1.FieldByName('conn').AsInteger := msg.LParam; ClientDataSet1.Post; end; except on E: Exception do begin LogInfo('Tf_MainForm.AddUser---' + E.Message); exit; end; end; end; procedure Tf_MainForm.DelUser(var msg: TMessage); var p: pClientConns; begin try Label4.Caption := IntToStr(G_ConnnectCount); p := pClientConns(msg.WParam); if Assigned(p) then begin if ClientDataSet1.FindKey([p^.clientid]) then ClientDataSet1.Delete; Dispose(p); end; except on E: Exception do begin LogInfo('Tf_MainForm.DelUser---' + E.Message); exit; end; end; end;
相关文章推荐
- datasnap 如何监控客户端的连接情况
- datasnap 如何监控客户端的连接情况
- datasnap 如何监控客户端的连接情况
- DataSnap如何监控Tcp/IP客户端的连接情况
- datasnap 如何监控客户端的连接情况
- datasnap中间件如何控制长连接的客户端连接?
- 如何让中间层MIDAS/DATASNAP支持大量的并发用户并且控制连接数量
- 如何查看oracle某时刻的客户端连接情况并显示客户端IP
- 如何在没有tomcat情况下直接连接JMX监控JVM
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- 如何建立datasnap客户端回调机制
- C# 不安装Oracle客户端情况下,如何连接到Oracle数据库
- DataSnap服务器如何得到客户端的IP和端口
- 如何在不安装Oracle客户端的情况下,使用PL/SQL Developer连接数据库
- 如何在不安装Oracle客户端的情况下,使用PL/SQL Developer连接数据库
- 如何让中间层MIDAS/DATASNAP支持大量的并发用户并且控制连接数量
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- datasnap 2010 DataSnap服务器如何得到客户端的IP和端口
- 如何在不安装Oracle客户端的情况下,使用PL/SQL Developer连接数据库
- datasnap 客户端如何设置commandText?