Tcp Server der Website ausliest und Daten an Clienten vertei

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Bobo2040

Betreff: Tcp Server der Website ausliest und Daten an Clienten vertei

BeitragSa, Sep 21, 2013 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Mein Spiel ist jetzt fast fertig nur habe ich mir jetzt mal ueberlegt
Ob es geht das ich einen Tcp Server Starte und wenn er gestartet ist
Die Daten die der Server aus einer Website ausliest an die Clienten weitergibt?
Ich weiss das UDP besser ist aber ich wuerde es erstmal lieber mit Tcp
Machen finde ich einfacher Smile
Und wenn der Server alle 50ms die Daten abruft dann ist das ja im Prinzip nur so als
Ob einer alle 50ms auf die Website zugreift anstatt das alle Clienten alle 50ms
Auf die Website zugreifen oder irre ich mich da?
Und noch eine Frage brauche ich eine Gute Internet Verbindung dazu um
An 10+ Clienten gleichzeitig Daten zu senden kann der Tcp Server da zusammenbrechen ?
Kann der das uberhaupt alle 50-75ms an alle Clienten schicken ?
Und noch eine Frage der Tcp Server ist ja nur so schnell wie mein Pc oder ?
kann ich rinen Tcp Server auch auf einen Windows Server ziehen damit mein Pc u d meine Internetverbindung nicht 24/7 belastet wird...
Und wenn das mit dem Server und Datenverteilung geht habt ihr ein Tutorial dazu?
Habe dazu keins gefunden... Sad
Mfg

TimBo

BeitragSa, Sep 21, 2013 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
was willst du denn auslesen ? Webserver mit PHP / mysql werden dir viel günstiger zur Verfügung stehen !
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Bobo2040

BeitragSa, Sep 21, 2013 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ich will eine Website auslesen wo ein String ausgegeben wird der von PHP ausgelsen wird
Und da wollte ich fragen ob der Tcp Server das machen kann und alle gefundenen Daten
An alle Clienten senden kann... ?

TimBo

BeitragSa, Sep 21, 2013 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
also mit php kannst du sachen durch $_POST[] und $_GET[] auslesen, die BB mitsendet.

mit BB kannst du einfach mit den StreamBefehlen arbeiten.
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

ZEVS

BeitragSa, Sep 21, 2013 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann auch TCP-Sockets zum Empfangen von Verbindungen mit PHP erstellen, siehe http://php.net/manual/de/funct...create.php. Ich würde allerdings empfehlen, den TCP-Server nicht mit PHP zu schreiben. Nimm' einfach BB dafür.

Und gewöhne dir bitte an, in deinen Posts nur dann Zeilenumbrüche zu setzen, wenn du einen Absatz machen willst. Und das Großschreiben jedes Zeilenanfangs kann man in Gedichten machen, wenn es ein zusammenhängender Text sein soll, ist es extrem verwirrend.

ZEVS
 

Bobo2040

BeitragSa, Sep 21, 2013 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit dem Grossschreiben tut mir leid macht mein Handy automatisch...
Und ich wollte ja nicht mit Php die Daten empfengen Smile
Sondern die Daten auslesen das kann ich und der Tcp Server soll dann die Website durchsuchen und die Daten die von Php durch echo ausgegeben werden , an alle anderen Cliente weitergeben... Also der Tcp Server soll eine Art Schnittstelle sein damit nicht 10leute gleichzeitig die Website anpingen damit die nur von dem Server angepingt wird ... Halt damit der Server nicht abstuerzt. Das war meine Idee und da wollte ich fragen ob es uberhaupt was bringt... Und wenn ja wie man das Inetwa macht ...Tutorial oder so dazu waere nett Smile
Weil ich steh grad aufm Schlauch ich kann zwar mit Tcp einen Server erstellen und weis auch wie man die Daten an die Clienten Schickt nur weiß ich nicht wie ich die sachen auslese und dann verteile und das als Server...

Xeres

Moderator

BeitragSa, Sep 21, 2013 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Das klingt alles immer noch konfus... Du meinst mit "Server" dein Spiel-Server und dann hast du noch einen Webserver? Warum willst du jetzt die beiden miteinander kommunizieren lassen?
Über je mehr Ecken du deine Kommunikation abwickelst, desto langsamer wird sie. Warum müssen die Daten da alle 50 ms abgefragt werden? Wenn es um Geschwindigkeit geht, nimmt man von vorn herein UDP und nicht TCP.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Bobo2040

BeitragSo, Sep 22, 2013 0:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja genau die Sollen miteinander Kommunizieren und der Tcp Server (Spiel Server)
Soll die Daten die er vom Webserver bekommt an die Clienten schicken Smile
Und UDP benutze ich nicht weil ichs nicht blicke Smile
Man kann ja immernich spaeter auf UDP umsteigen Wink
Und alle 50-75ms weil es ein MMORPG wird also ein echtzeit Spiel Smile

Xeres

Moderator

BeitragSo, Sep 22, 2013 1:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie gesagt: Wenn es auf Geschwindigkeit ankommt, benutze UDP. Nichts wird durch zusätzliche Wege schneller, also lass die Clienten direkt mit dem Server kommunizieren.
World of Warcraft hat üblicherweise Pings von 100-150 ms und ich glaube nicht, dass man mit TCP irgendwas schnelleres erreichen kann.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Bobo2040

BeitragSo, Sep 22, 2013 1:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm okay...
Naja 150-250ms waere auch in Ordnung... Solange die gegner keine Map spruenge machen Smile

Pummelie

BeitragSo, Sep 22, 2013 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
TCP ist für Echtzeit vollkommen ungeeignet, zumindest in BB.
Jede TCP Kommunikation hängt das Programm komplett auf bis sie vollzogen ist.
Nun gehen wir mal von einem Ping von 250ms aus.
Folglich läuft dann das Spiel mit ~4 FPS...

Es führt kein Weg um UDP herum.
It's done when it's done.
 

Bobo2040

BeitragSo, Sep 22, 2013 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube das du dich da Irrst ich habe eine Function in meinem Spiel die alle 50ms die x und y und hitpoints an die Datenbank schickt also mehr an Php Smile
Und das Spiel laeuft ganz normal wenn ich die Function in der Hauptschleife starte Wink
Lediglich wird MySql ueberlastet ^^ was sich aber schnell beheben laesst indem ich die Sendegeschwindigkeit runterdrehe Smile

Starwar

BeitragSo, Sep 22, 2013 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe den Thread nicht von Anfang an verfolgt, aber wenn du vorhast ein Echtzeitspiel mit PHP/MySQL umzusetzen, wird das nicht klappen. Es ist einfach zu langsam und zudem wird dich ein Webhoster schnell nicht mehr mögen.
Die einzig sinnvolle Lösung ist UDP. Entweder über Direktverbindungen bzw. Peer-to-Peer oder einen dedizierten Server.
Daten, die in Echtzeit übertragen werden müssen und auch mal verloren gehen dürfen oder in der falschen Reihenfolge ankommen dürfen (etwa Spielerpositionen) werden einfach per UDP gesendet.
Daten, die sicher ankommen müssen (etwa Chatnarichten) können etweder durch eine zusätzliche TCP-Verbindung übertragen werden oder du erweiterst dein Protokoll um Mechanismen, die sicherstellen, dass alle gesendeten Daten ankommen und wieder richtig sortiert werden.
Auch eine Möglickeit ist die Verwendung von SimpleUDP (findest du hier im Forum).
MFG
 

Bobo2040

BeitragSo, Sep 22, 2013 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm ... okay
nur verstehe ich UDP nicht so wirklich .. hat jemand von euch ein Beispiel für ein Mini Echtzeit Spiel oder sowas...
Und wie soll ich die Daten verschlüsseln geht das überhaupt ?
Mfg

Starwar

BeitragSo, Sep 22, 2013 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Zuerst solltest du dich mit dem Unterschied zwischen UDP und TCP auseinandersetzen. Da bietet sich die Wikipedia an.
Ein Beispiel zu UDP in BB findest du hier: CreateUDPStream.
Beispiele zu SimpleUDP liegen dem Download von SimpleUDP bei.
Zum selbst Experimentieren eigent es sich (finde ich) einen Multiuser-Chat zu programmieren.
Beachte bitte: Alles was du machst solltest du im lokalen Netzwerk machen, da es sonst nicht (so einfach) funktioniert. Kommunikation über das Internet hat so ihre Tücken (NATs, Firewalls).
Verschlüsselung ist möglich, aber kompliziert und muss vor allem Dingen sehr gewissenhaft implementiert werden. Also stell das erstmal weit zurück.
 

Bobo2040

BeitragSo, Sep 22, 2013 12:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay danke Very Happy
Ich schaus mir mal an Very Happy
Werdet bestimmt noch von mir hören xD

EDIT:
So eben die SimpleUDP angeschaut und die ist nix für mich ... was ich nichtmal ansatzweise verstehe will ich nicht benutzen Very Happy
Und es gibt echt wenige UDP Tutorials... kennt ihr ein gutes ?
Bin am suchen aber nix anständiges was ich verstehe bis jetzt gefunden Crying or Very sad

EDIT2:
Habe mir eben das Tutorial angeschaut https://www.blitzforum.de/foru...hlight=udp
und ich muss sagen soo schwer ist UDP nicht Very Happy

BladeRunner

Moderator

BeitragSo, Sep 22, 2013 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
seimir nicht böse, aber ich glaube deine Aussage nicht dass dein Spiel schon fast fertig ist.
nach dem was du hier und in anderen Themas so fragst glaube ich dass du noch einen weiten Weg vor dir hast.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Bobo2040

BeitragSo, Sep 22, 2013 13:51
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm naaa nicht so wirklich Very Happy
Offline ist es bis auf das sich das Schiff drehen soll fertig Wink
Nur wollte ich es halt gerne Online machen und die Funktion zum verarbeiten der bekommenen Daten habe ich schon Wink muss jetzt nur noch das mit dem UDP hinbekommen ^^
Nur habe ich mal so ein bisschen rumgespielt und irgendwie sagt er InvalidUDP Handle...
Kann mir einer Da helfen.. mein Code :
BlitzBasic: [AUSKLAPPEN]

;--- Server ... kann bisjetzt nur 1 sache und zwar Nachrichten empfangen und verteilen ...
Graphics 640,480,16,2
SetBuffer BackBuffer()

Type client
Field port,ip
Field name$
End Type

udp = CreateUDPStream(3333)

Repeat
Cls

If RecvUDPMsg(udp) <> 0 Then
client_ip = UDPMsgIP(udp)
client_port = UDPMsgPort(udp)

message=ReadByte(udp)
EndIf

Select message
Case 1
name$ = ReadString(udp)
txt$ = ReadString(udp)

For c.client = Each client
If Not c\name$ = name$ Then
WriteByte(udp,1)
WriteString(udp,name$)
WriteString(udp,txt$)
SendUDPMsg udp,c\ip,c\port
EndIf
Next

Print name$ + " : " + txt$
End Select

Flip

Until KeyHit(1)
CloseUDPStream(udp)
End

Und dann noch den Clienten
BlitzBasic: [AUSKLAPPEN]

Graphics 640,480,16,2
SetBuffer BackBuffer()

Type client
Field name$
End Type

server_ip$ = "127.0.0.1"
server_port = 3333
client_name$=Input()

udp=CreateUDPStream()

If Not udp Then
Print "keine Verbindung zum Server."
WaitKey
End
EndIf

Repeat
Cls
ShowEnemy()
ShowMyShip()
Flip
Until KeyHit(1)

Function PrintCoor()
WriteByte(udp,1)
WriteString(udp,client_name$)
WriteString(udp,x+":"+y)
SendUDPMsg udp,Int_IP(server_ip$),server_port
End Function

Function ShowEnemy()
If RecvUDPMsg(udp) <> 0 Then
name$ = ReadString(udp)
txt$ = ReadString(udp)

p1 = Instr(txt$,":")
vorne$ = Left$(txt$,p1-1)
hinten$ = Right$(txt$,p1+1)
Color 255,140,0
Rect vorne$,hinten$,100,50,1
EndIf
End Function

Function ShowMyShip()
If MouseHit(1) Then
x=MouseX()
y=MouseY()
Color 255,140,140
Rect x,y,100,50,1
EndIf
End Function

Function INT_IP(IP$)
a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a3=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a4=Int(IP$)

Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) +a4
End Function

Die INT_IP() Function habe ich einfach so aus dem Tutorial übernommen ...


EDIT:
Ahhh bin ich blöd xD
Habe vergessen die Variable "udp" Global zu machen Very Happy
 

Bobo2040

BeitragMo, Sep 23, 2013 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm okay...
ich dreh irgendwie bald durch... es funktioniert zwar das der CLient dem Server permanent sachen schickt aber nicht andersrum Sad
irgendwie schickt der Server nichts ich weiß das er nichts schickt weil RecvUDPMsg() Null ist Sad
Habe viel rumprobiert und dann auch ne Menge überprüfungen weggemacht ...
Aber irgendwie komme ich nicht drauf was ich Falsch mache ...
Hier ist mal mein Code...
Server
BlitzBasic: [AUSKLAPPEN]

Global client_ip,client_port
Global message
Global server_port = 7134
Global server_port2 = 7135
Global udp = CreateUDPStream(server_port)
Global udp2 = CreateUDPStream(server_port2)

Type client
Field port,ip
Field name$
End Type



If Not udp Then
Print "Ging nicht.."
EndIf

Print "Server gestartet..."
Repeat

If RecvUDPMsg(udp) <> 0 Then
client_ip = UDPMsgIP(udp)
client_port = UDPMsgPort(udp)

message=ReadByte(udp)
EndIf

Select message
Case 1
name$ = ReadString(udp)
txt$ = ReadString(udp)

For c.client = Each client
;If Not c\name$ = name$ Then
WriteByte(udp2,1)
WriteString(udp2,name$)
WriteString(udp2,txt$)
SendUDPMsg udp2,c\ip,c\port

;EndIf
Next

Print name$ + " : " + txt$

End Select
Delay 1 ;ich weiß das da eig. waittimer kommen sollte...
Until KeyHit(1)
CloseUDPStream(udp)
End

Client
BlitzBasic: [AUSKLAPPEN]

Graphics 240,120,16,2
SetBuffer BackBuffer()

Type client
Field name$
End Type

Global server_ip$ = "127.0.0.1"
Global server_port = 7134
Global server_port2 = 7135

Global client_name$=Input()

Global udp2=CreateUDPStream()
Global udp=CreateUDPStream()
Global x,y
Global txt$
Global name$
Global message

If Not udp Then
Print "Keine Verbindung zum Server."
WaitKey
End
EndIf

Repeat
Cls
ShowMyShip()
ShowEnemy()
PrintCoor()
Delay 1
Flip
Until KeyHit(1)

Function PrintCoor()
WriteByte(udp,1)
WriteString(udp,client_name$)
WriteString(udp,x)
SendUDPMsg udp,INT_IP(server_ip$),server_port
End Function

Function ShowEnemy()
message=ReadByte(udp2)

name$ = ReadString(udp2)
txt$ = ReadString(udp2)

;p1 = Instr(txt$,":")
;vorne$ = Left$(txt$,p1-1)
;hinten$ = Right$(txt$,p1+1)
Print txt$
Print name$
; Print vorne$+" : "+hinten$ + "P1:"+p1


Color 255,140,0
Rect vorne$,hinten$,10,20,1

End Function

Function ShowMyShip()
If MouseDown(1) Then
x=MouseX()
y=MouseY()
EndIf
Color 255,140,140
Rect x,y,20,20,1
End Function

Function INT_IP(IP$)
a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a3=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
a4=Int(IP$)

Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) +a4
End Function


EDIT:
Sry für Doppelpost ... kann jemand die zusammenfügen ?

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group