Bonjour

J'ai une appli qui reçoit des données de terminaux distants. J'utilise TidTCPServer (indy 9), delphi 7 et firebird 2. Le problème est que quand le nombre de connections augmente (>5) mon serveur plante

Mes questions sont les suivantes:
- dois-je créer une transaction pour chaque requête (donc pour chaque thread)?
- j'utilise les composants FIBPlus: celà pose-t-il un problème? les composants IBX sont ils plus performants dans mon cas?
- le composant TServerSocket serait-il plus adapté à ce cas précis?

Ci-dessus mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
procedure TFrmMain.TCPServerExecute(AThread: TIdPeerThread);
var
 errorStr, Trame:string;
 thTrans : TpFIBTransaction;
 thQuery : TpFIBQuery;
begin
 try
  begin
  if not AThread.Terminated and AThread.Connection.Connected then
    begin
     Trame := AThread.Connection.ReadLn;
     if Trame <> '' then
      begin
       try
        begin
         //Création des Objets
//          thTrans := TpFIBTransaction.Create(nil);
         thQuery := TpFIBQuery.Create(nil);
//        thTrans := TIBTransaction.Create(Application);
//        thQuery := TIBQuery.Create(Application);
         //Modif des propriétés
//         with thTrans do
//         begin
//          DefaultDatabase := dbTCPServer;
//          thTrans.TimeoutAction := TACommit;
//          thTrans.Timeout := 1;
//          Active := True;
//         end;
        with thQuery do
         begin
          DataBase := dbTCPServer;
          Transaction := dbTCPServer.DefaultTransaction; //dbTrans;
          SQL.Add('INSERT INTO DATA (DECDATA) VALUES (:DECDATA)');
         end;
        //Début de la transaction, insertion, et commit
//        thTrans.StartTransaction;
        with thQuery do
         begin
          Params.ParamByName('DECDATA').AsString := Trame;
          ExecQuery;
         end;
//         thTrans.Commit;
        end
       except on e:exception do
        begin
         logError('Erreur SaveTrame : ' + e.Message);
         //ShowMessage('Erreur : ' + e.Message);
        end
       end;
      end;
    end;
  end
 except on e:exception do
  begin
   errorStr := e.Message;
  end
 end;
end;
Merci beaucoup de votre aide