networkServer.pb: cpu-auslastung
networkServer.pb: cpu-auslastung
hi,
die exe der networkServer.pb belegt einen ganzen kern mit 100%. ich habe nun versucht, ein dickes delay in die repeat-schleife einzuschmuggeln (200), die last sinkt auf 6%. beeinträchtigt dies die funktions-/reaktionsfähigkeit des servers?
ich will kein echtzeitspiel damit erstellen, sondern nur strings abfangen (chat-ähnlich), die mir ein client alle paar sekunden schickt. als protokoll verwende ich udp (gleicher rechner - übertragungsfehler sollten nicht vorkommen). wenn ein string später ankommt, ist das kein problem, nur verloren gehen sollte er nicht, wenn er grad in einer delay-phase ankommt.
die exe der networkServer.pb belegt einen ganzen kern mit 100%. ich habe nun versucht, ein dickes delay in die repeat-schleife einzuschmuggeln (200), die last sinkt auf 6%. beeinträchtigt dies die funktions-/reaktionsfähigkeit des servers?
ich will kein echtzeitspiel damit erstellen, sondern nur strings abfangen (chat-ähnlich), die mir ein client alle paar sekunden schickt. als protokoll verwende ich udp (gleicher rechner - übertragungsfehler sollten nicht vorkommen). wenn ein string später ankommt, ist das kein problem, nur verloren gehen sollte er nicht, wenn er grad in einer delay-phase ankommt.
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
Re: networkServer.pb: cpu-auslastung
Ein Delay(200) mit jedem Schleifendurchgang ist schlecht.
Denn falls wirklich mehr als ein ServerEvent in diesen 200ms kommt, gehen die Events zwar nicht verloren, aber "stauen" sich an, und die Verzögerung wird größer.
Lösung wäre:
Dass heißt, nur dann ein Delay() ausführen wenn alle in den 100ms angestauten Events abgearbeitet wurden.
Edit:
Wenn du ein Chat schreiben willst, und die nachricht nicht verloren gehen sollte, verwende bitte TCP und nicht UDP ...
Denn falls wirklich mehr als ein ServerEvent in diesen 200ms kommt, gehen die Events zwar nicht verloren, aber "stauen" sich an, und die Verzögerung wird größer.
Lösung wäre:
Code: Alles auswählen
Repeat
Select NetworkServerEvent()
Case #PB_NetworkEvent_Connect
Case #PB_NetworkEvent_Data
Case #PB_NetworkEvent_File
Case #PB_NetworkEvent_Disconnect
Default
Delay(100)
EndSelect
Until Quit
Edit:
Wenn du ein Chat schreiben willst, und die nachricht nicht verloren gehen sollte, verwende bitte TCP und nicht UDP ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: networkServer.pb: cpu-auslastung
danke. nein, ich will keinen chat schreiben, sondern daten zwischen 2 programmen austauschen, wobei es nicht um wichtige dinge geht, nur ein mitloggen von ereignissen. ja und das funktioniert nicht über stdout aufgrund des designs des anderen programms... frag lieber nicht.
leider klappt dein ansatz nicht. die auslastung bleibt gleichmäßig hoch. noch eine andere idee? ich bin inzwischen dabei:
in ordnung oder eher mau?
leider klappt dein ansatz nicht. die auslastung bleibt gleichmäßig hoch. noch eine andere idee? ich bin inzwischen dabei:
Code: Alles auswählen
Repeat
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case 2
ReceiveNetworkData(ClientID, *Buffer, 1000)
PrintN(PeekS(*Buffer))
EndSelect
Else
Delay(200)
EndIf
Until Quit =2
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
Re: networkServer.pb: cpu-auslastung
Kan ich nicht nachvollziehen. Bei mir hat dieser Code mit einem Server 0% CPU auslastung.leider klappt dein ansatz nicht. die auslastung bleibt gleichmäßig hoch
Wenn du natürlich "im dauerfeuer" Daten sendest dann bleibt dem Server ja nichts anderes übrig als dauerhaft zu arbeiten ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: networkServer.pb: cpu-auslastung
ich sende zu testzwecken jede sekunde einen 20 zeichen langen string. und auch wenn die app, die auf dem port sendet, schon lange abgeschossen ist, bleibt die auslastung voll. vielleicht ein bug der 4.41?
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
- HeX0R
- Beiträge: 3040
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: networkServer.pb: cpu-auslastung
Vielleicht ein Bug im unsichtbaren Rest des Codes?broozar hat geschrieben:vielleicht ein bug der 4.41?
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
Re: networkServer.pb: cpu-auslastung
aktuell ist die 4.51broozar hat geschrieben:vielleicht ein bug der 4.41?
Grüße ... Kiffi
a²+b²=mc²
Re: networkServer.pb: cpu-auslastung
NetworkServer.pb im example-folder.HeX0R hat geschrieben:Vielleicht ein Bug im unsichtbaren Rest des Codes?
ich schreibe gern projekte zuende in der version, mit der ich sie begonnen habe.Kiffi hat geschrieben:aktuell ist die 4.51
ich find meine lösung mit dem if-else gut, die cpu-belastung ist minimal und auch bei/nach eventstau (künstliches anhalten durch input() ) arbeitet sie korrekt weiter.
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
- HeX0R
- Beiträge: 3040
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: networkServer.pb: cpu-auslastung
Hier werden jede Sekunde 30 Zeichen gesendet und was sagt die CPU-Auslastung bei dir?
Ich weiß, das ist ein Fenster und keine Konsole, aber wer braucht schon Konsole...
Code: Alles auswählen
EnableExplicit
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Procedure main()
Protected Port, *Buffer, ClientID, SEvent, R, a$, CID
Port = 6832
*Buffer = AllocateMemory(1000)
If CreateNetworkServer(0, Port)
OpenWindow(0, 0, 0, 300, 300, "Server", $C8001)
ListViewGadget(0, 5, 5, 290, 270)
AddGadgetItem(0, -1, "Server created (Port " + Str(Port) + ").")
ClientID = OpenNetworkConnection("localhost", Port)
If ClientID
AddGadgetItem(0, -1, "Client is here")
Else
AddGadgetItem(0, -1, "No Client... try with 127.0.0.1")
EndIf
;Send any 1000ms a String
AddWindowTimer(0, 0, 1000)
Repeat
Select WaitWindowEvent(5)
Case #PB_Event_CloseWindow
If ClientID
CloseNetworkConnection(ClientID)
ClientID = 0
EndIf
Case #PB_Event_Timer
If ClientID
SendNetworkString(ClientID, "Ui, ich bin ja immernoch da...")
EndIf
EndSelect
SEvent = NetworkServerEvent()
If SEvent
CID = EventClient()
Select SEvent
Case #PB_NetworkEvent_Connect
AddGadgetItem(0, -1, "A new client (" + Str(CID) + ") has connected!")
Case #PB_NetworkEvent_Data
R = ReceiveNetworkData(CID, *Buffer, 1000)
If R > 0
a$ = PeekS(*Buffer, R)
AddGadgetItem(0, -1, "Client " + Str(CID) + " sent: " + a$)
EndIf
Case #PB_NetworkEvent_Disconnect
AddGadgetItem(0, -1, "Client " + Str(CID) + " disconnected!")
Break
EndSelect
EndIf
ForEver
CloseNetworkServer(0)
EndIf
FreeMemory(*Buffer)
EndProcedure
main()
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
Re: networkServer.pb: cpu-auslastung
4%. da du aber automatisch idlest dank waitwindowevent... außerdem bin ich auf die konsole angewiesen.
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7