Autor Beitrag
Drax
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 03.11.04 12:18 
Hallo.

Ich bin hier im Forum auf das "Simple" :-) Netzwerkgame gestoßen. (www.delphi-forum.de/...tworkgame_28740.html)

Das hört sich schon mal seeeehr interessant an.

Was mir vorschwebt:

Ein fester Server im Internet wird über einen Client kontaktiert.

Der Client erhält dann vom Server eine Liste von Leute, die sich im selbem "Raum" aufhalten. (zusammen mit den ip adressen dieser rechner)

Nun sollte der Client hingehen und sich per udp quasi in diesen Raum einklinken, d.h. der Client sendet dann an alle adressen im "Raum" seine chatmessages, statusanfragen etc. und erhält seinerseits informationen von den anderen clients.

Sinn und Zweck wäre es halt, auf die art den server nicht zu belasten (der wird ja nur benötigt um einmalig die adressen zu versenden und ggf. an/abmeldungen zu handhaben)

Nun die grosse Fragen: Wieviele "Clients" wären denn da möglich ?
10 ? 100? (Gut, das bei UDP mal die eine oder andere Nachricht verschwindet könnte man verschmerzen)

Das der Client an sagen wir 100 Leute udp-messages verschickt, müsste doch gehen oder ?
Solange die Datenpakete nicht zu groß sind, sollte das ja auch eine langsame modem/isdn leitung packen können, wenn sagen wir nur alle 2 Sekunden ein "burst" rausgeht.(?)

(Die Verbindung zum Server über TCP, wegen der Datenintegrität)

Könnte der Server es schaffen, auch eine große Menge von Useranfragen zu verkraften, d.h. könnte man da theoretisch mehrere tausend drüberlaufenlassen oder ist das utopisch ?
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mi 03.11.04 12:34 
Hallo!

Theoretisch ist die Zahl der Verbindungen tatsächlich nicht begrenzt, jedoch sind die Komponenten nicht dafür ausgelegt, da die Daten einer Statusänderung (z.B. "Benutzer A betritt Raum B") grundsätzlich an alle geht. Ich habe das mal auf meine Todo-Liste gesetzt, um das umzustrukturieren.

Was die Kommunikation angeht:
Die Komponenten sind so konstruiert, daß der Client nicht an andere Clients, sondern grundsätzlich nur an den Server sendet und von ihm empfängt, dieser hätte dann dafür zu sorgen, daß die Nachricht an alle im Raum weitergeleitet wird, genauso, wie es in der Demo-Anwendung gemacht wird.

ausblenden Delphi-Quelltext
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:
procedure TFRM_Server.ServerInput(Sender:TSNWComponent; User: TSNWUser; Stream: TStream;
  Protocol: TProtocol);
var Text:String;
var i:integer;
var DestStream:TMemoryStream;
begin
  Memo.Lines.Add(User.UserName+' sendet Text.');

  //Text einlesen
  LoadStrFromStream(Stream,Text);
  //den Text um den Usernamen ergänzen
  Text:=User.UserName+' : '+Text;

  //Stream erstellen
  DestStream:=TMemoryStream.Create;
  try
    //Text in Stream schreiben
    SaveStrToStream(DestStream,Text);
    //Text an alle User der Gruppe senden
    for i:=0 to Server.Users.Count-1 do
      if Server.Users[i].Group=User.Group then
        Server.SendStream(Server.Users[i],DestStream,Protocol);
  finally
    DestStream.Free;
  end;
end;


Ansonsten muss eben jedem "Client" auch eine Serverkomponente mitgegeben werden, über die dann von anderen Clients Daten empfangen werden können.

Cu,
Udontknow