Problem mit Lags von TCP (erledigt)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Apprauuuu

Betreff: Problem mit Lags von TCP (erledigt)

BeitragMo, Jul 24, 2006 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich habe mein schönes im Grunde UDP-basierendes MMultiplayershooterspiel, welches durch ein paar TCP-Befehle ergänzt wird, die sehr wichtige Nachrichten übernhemen, welche nicht verloren gehen dürfen....
Zum Beispiel wird dann halt beim Tod eines Spielers eine TCP-Nachricht statt einer UDP-nachricht versendet, da diese 100% ankommen muss!

Das Problem ist, dass es dann bei allen Spielern kurz lagt

Hier der Code des Clients:
Code: [AUSKLAPPEN]
Function read_client()
   If ReadAvail(serverstream)
      typ = ReadByte(serverstream)
      Select typ
         Case 1 ; Spieler tot
                               opferid = readbyte(serverstream)
                               fraggerid = readbyte(serverstream)
                               ;mache zeugs damit usw...
               


Der Server sendet halt genau so:
Code: [AUSKLAPPEN]
writebyte stream(pl), 1
writebyte stream(pl), opferid
writebyte stream(pl), killerid


Wie das halt so geht...
Nur wartet der CLient halt, nachdem er den ersten byte gelesen hat und weiß, dass es sich um den Nachrichtentyp 1 handelt (also, dass ein Spieler gestorben ist), auf die restlichen Nachrichten und das ergibt halt den Lag....

Jetzt hab ich den Rat bekommen, dass der Server allles einfach in eine Bank schreiben soll und diese dann einfach absendet, nur ist da halt das Problem, dass ich meiner Meinung nach keine Möglichkeit habe die Länge der gesendeteten bank beim Client rauszufinden, da beim Lesebefehl "Readbytes" ja schon die Bytezahl der Bankvariablen schon benötigt wird und der Client nicht mal weiß um welchen Nachrichtentyp es sich handelt
(wenn es klar wäre, dass der Typ 1 wäre, also dass ein Spieler gestorben wäre, dann wüsste ich ja, dass das Teil 2 Bytes lang ist...)

Bitte um Lösungsvorschläge um das Problem!
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)
  • Zuletzt bearbeitet von Apprauuuu am Mo, Jul 24, 2006 22:34, insgesamt einmal bearbeitet
 

Shark

BeitragMo, Jul 24, 2006 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Also mit Bank ist es möglich! Ich denke mir dann das es kein lag geben wird

Hier die funktionen die du brauchst

Code: [AUSKLAPPEN]
Function WriteTCPInt(bank,wert)
        PokeInt bank,outbankpointer,wert
        outbankpointer=outbankpointer+4
End Function

Function WriteTCPShort(bank,wert)
        PokeShort bank,outbankpointer,wert
        outbankpointer=outbankpointer+2
End Function

Function WriteTCPByte(bank,wert)
        PokeByte bank,outbankpointer,wert
        outbankpointer=outbankpointer+1
End Function


Function WriteTCPFloat(bank,wert)
        PokeFloat bank,outbankpointer,wert
        outbankpointer=outbankpointer+4
End Function

Function SendTCPMsg(bank,stream,bytes)
        WriteBytes(bank,stream,0,bytes)
        outbankpointer=0
End Function


und du musst noch am anfang deines Codes
Code: [AUSKLAPPEN]

Global bank = CreateBank(10)
Global outbankpointer

Das machen Wink

So um jetzt zusenden machst du es so!


Code: [AUSKLAPPEN]

WriteTCPByte(bank,1)
WriteTCPByte(bank,opferid)
WriteTCPByte(bank,killerid)
SendTCPMsg(bank,stream,3)


Du kannst es jetzt normal auslesen
Ich hoffe es hilft dir was

mfg Shark

Apprauuuu

BeitragMo, Jul 24, 2006 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke sehr!
Funktioniert jetzt alles wunderbar! =)

PS: Diese vorgehensweise würde ich jedem TCP-User raten, da dann nicht jedes Mal der Header mitgesendet werden muss! Wink
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)
 

BIG BUG

BeitragMi, Jul 26, 2006 0:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Cooler Tipp. Kannte den Befehl noch gar nicht und hatte meine Datenmengen daher bisher in Strings zusammengepackt Rolling Eyes.

Gabs nicht mal irgendwo einen Thread mit solchen Hidden Features?
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

BtbN

BeitragMi, Jul 26, 2006 9:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ist da bitte ein Hidden Feature? Der befehl WriteBytes und die Bank-befehle sind doch Standard und auch in der OH.

StepTiger

BeitragMi, Jul 26, 2006 9:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Die kommen da aber nicht vor!

Da wird alles über Pokebyte usw. geregelt
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

BtbN

BeitragMi, Jul 26, 2006 9:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, PokeByte/PokeInt/... sind die Standard Bank-Befehle, um Daten in die Bank zu bekommen. Ich weiss einfach nicht, wasdaran Hidden sein soll.

StepTiger

BeitragMi, Jul 26, 2006 9:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Pass auf!

WriteByte handle,3 sendet Header und Wert 3
PokeByte handle,point,3 sendet ab punkt "point" den wert 3

PokeByte-> Kein Header-> schneller-> Bessere Spielgeschwindigkeit

sendet alles schneller
Arrow siehe Hidden
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

D2006

Administrator

BeitragMi, Jul 26, 2006 10:56
Antworten mit Zitat
Benutzer-Profile anzeigen
also direkt in einen Stream zu Poken geht sicher nicht. Is ja ein Stream.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

StepTiger

BeitragMi, Jul 26, 2006 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
D2006 hat Folgendes geschrieben:
also direkt in einen Stream zu Poken geht sicher nicht. Is ja ein Stream.


wird ja dann über die Funktion gesendet Smile

da hat man eben nur einen header
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

D2006

Administrator

BeitragMi, Jul 26, 2006 11:24
Antworten mit Zitat
Benutzer-Profile anzeigen
um den Header braucht man sich bei TCP im Allgemeinen keinen Kopf zerbrechen, da der Nagle Algoithmus zum Einsatz kommt.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

BIG BUG

BeitragMi, Jul 26, 2006 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, der Befehl wird zwar bei Banks aufgelistet, die Hilfe bezieht sich dabei dann aber nur auf das Schreiben von Dateien... vielleicht das dann nicht direkt "hidden" aber halt auch nicht sonderlich offensichtlich.
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group