Ik ben bezig met een socket server.
Ik heb alles bijna voor elkaar maar loop tegen een probleem aan.
Wat ik wil is: De client verbind met de server en luisterd 25 seconden en daarna wordt de client gedisconnect.
Het probleem is de socket_read functie wacht totdat hij wat gelezen heeft.
Dus als ik 2 clients heb dan heb ik 2 read functies. (Ik maak voor iedere connectie een nieuwe instance aan van een class die de afhandeling doet per connectie). Als dan de 1e read functie wacht op lezen dan staat de 2e connectie 'niks' te doen. Mijn 2e probleem is dat de time out die ik mmv een eigen berekening doe.
Omdat de socket_read pas de volgende regel triggert als hij wat gelezen heeft (tot \n of het aantal ingestelde bytes) loopt hij eigenlijk niet. Zolang ik niks schrijf 'verloopt' de time out niet. Dus hij si altijd connected totdat ik iets schrijf.
Mijn 2e connectie wacht ook op de read van de 1e connectie. Dus die timeout verloopt ook niet
Mijn Ajaxscript blijft dus maar runnen
Ik heb dus geprobeert dmv classes alle connecties apart af te handelen ma php niet multi threaded is maakt dat eigenlijk niet uit. (of kan dat met php wel?).
IK kom er niet meer uit
Ik wil dus eigenlijk dat de socket_read niet blijft wachten maar met een 'time out' stopt met wachten en verder gaat.
Nu zag ik dat er een functie is socket_set_nonblock(). Alleen zie ik bij alle voorbeelden en uitleg dat dit werkt voor de socket_accept. Dan failed hij direct. Maar hoe werkt dat dan bij de read of werkt het daar zowiezo niet bij
Omdat de 2e connectie ook wacht blijft mijn ajax script runnen. Ook al doe ik een fclose van de connectie. Ik zou dan ook bij de client een disconnect kunnen forceren na de time out. Dan stopt mijn ajax.php ook.
Kent iemand dit probleem?
Ik heb alles bijna voor elkaar maar loop tegen een probleem aan.
Wat ik wil is: De client verbind met de server en luisterd 25 seconden en daarna wordt de client gedisconnect.
Het probleem is de socket_read functie wacht totdat hij wat gelezen heeft.
Dus als ik 2 clients heb dan heb ik 2 read functies. (Ik maak voor iedere connectie een nieuwe instance aan van een class die de afhandeling doet per connectie). Als dan de 1e read functie wacht op lezen dan staat de 2e connectie 'niks' te doen. Mijn 2e probleem is dat de time out die ik mmv een eigen berekening doe.
code:
1
2
3
4
5
| $this->timeOUT = mktime(date("H"),date("i"),date("s")+5,date("m"),date("d"),date("Y")); while( mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y") < $this->timeOUT ) { } |
Omdat de socket_read pas de volgende regel triggert als hij wat gelezen heeft (tot \n of het aantal ingestelde bytes) loopt hij eigenlijk niet. Zolang ik niks schrijf 'verloopt' de time out niet. Dus hij si altijd connected totdat ik iets schrijf.
Mijn 2e connectie wacht ook op de read van de 1e connectie. Dus die timeout verloopt ook niet


Ik heb dus geprobeert dmv classes alle connecties apart af te handelen ma php niet multi threaded is maakt dat eigenlijk niet uit. (of kan dat met php wel?).
IK kom er niet meer uit
Nu zag ik dat er een functie is socket_set_nonblock(). Alleen zie ik bij alle voorbeelden en uitleg dat dit werkt voor de socket_accept. Dan failed hij direct. Maar hoe werkt dat dan bij de read of werkt het daar zowiezo niet bij
Omdat de 2e connectie ook wacht blijft mijn ajax script runnen. Ook al doe ik een fclose van de connectie. Ik zou dan ook bij de client een disconnect kunnen forceren na de time out. Dan stopt mijn ajax.php ook.
Kent iemand dit probleem?
Jochemmol