Problem mit Lags von TCP (erledigt)
Übersicht

![]() |
ApprauuuuBetreff: Problem mit Lags von TCP (erledigt) |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Cooler Tipp. Kannte den Befehl noch gar nicht und hatte meine Datenmengen daher bisher in Strings zusammengepackt ![]() Gabs nicht mal irgendwo einen Thread mit solchen Hidden Features? |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was ist da bitte ein Hidden Feature? Der befehl WriteBytes und die Bank-befehle sind doch Standard und auch in der OH. | ||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, PokeByte/PokeInt/... sind die Standard Bank-Befehle, um Daten in die Bank zu bekommen. Ich weiss einfach nicht, wasdaran Hidden sein soll. | ||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group