Sockets zijn veel ingewikkelder als PHP ze doet vermoeden.
Ik kan uit je verhaal niet helemaal opmaken wat je wilt, maar misschien kan je iets regelen met blocking/non-blocking sockets.
Blocking betekent dat een call om te lezen uit een socket gewoon "wacht" tot er data is, en non blocking probeerd te lezen, en als er niets is dan kapt ie meteen. Standaard staat dit op blocking (!)
Je kan dan iets maken als:
for(;;) {
$data = leesVanSocket();
if(er is data) {
handel data af;
} else {
handel browser calls/shit af
}
}
Dan blijf je altijd bereikbaar voor de clients die de pagina bezoeken
Mocht je daar niets mee kunnen, kan je bijvoorbeeld gebruik maken van select.
Dat is echter wel effe lastig om te begrijpen. Je zult sockets dan namelijk op een andere manier aan moeten maken, en anders moeten gebruiken. Je zal dan veel informatie over sockets en hoe ze werken meoten lezen, daarvoor verwijs ik je naar de php.net site. Als je het niet erg vind een voorbeeld in C te lezen, kan ik je altijd nog doorverwijzen naar Beej's Guide To Network Programming.
C is qua syntax erg gelijk aan PHP, en de manier om select() te gebruiken is ook nagenoeg hetzelfde. Dit kan je wellicht ook helpen.
maar let op: dan moet je dus geen gebruik maken van fsockopen! Je maakt dan gebruik van de echte onderliggende system calls..
Sockets zijn veel ingewikkelder als PHP ze doet vermoeden.
Ik kan uit je verhaal niet helemaal opmaken wat je wilt, maar misschien kan je iets regelen met blocking/non-blocking sockets.
Blocking betekent dat een call om te lezen uit een socket gewoon \"wacht\" tot er data is, en non blocking probeerd te lezen, en als er niets is dan kapt ie meteen. Standaard staat dit op blocking (!)
Je kan dan iets maken als:
for(;;) {
$data = leesVanSocket();
if(er is data) {
handel data af;
} else {
handel browser calls/shit af
}
}
Dan blijf je altijd bereikbaar voor de clients die de pagina bezoeken
Mocht je daar niets mee kunnen, kan je bijvoorbeeld gebruik maken van select.
Dat is echter wel effe lastig om te begrijpen. Je zult sockets dan namelijk op een andere manier aan moeten maken, en anders moeten gebruiken. Je zal dan veel informatie over sockets en hoe ze werken meoten lezen, daarvoor verwijs ik je naar de php.net site. Als je het niet erg vind een voorbeeld in C te lezen, kan ik je altijd nog doorverwijzen naar Beej\'s Guide To Network Programming.
C is qua syntax erg gelijk aan PHP, en de manier om select() te gebruiken is ook nagenoeg hetzelfde. Dit kan je wellicht ook helpen.
maar let op: dan moet je dus geen gebruik maken van fsockopen! Je maakt dan gebruik van de echte onderliggende system calls..
Bedankt voor de informatie, Ik wil graag een rCon client maken. Maar dan moet die socket altijd verbonden zijn. Ebuddy bijvoorbeeld. die houd zolang je het vesnter open hebt staan verbinding met de Microsoft Nameservers.
Nee. Het heet een NS ja, maar is geen NameServer.
NS is bij MSN Messenger de afkorting voor Notification Server. Je hebt ook een SB, die heet het switchboard. Daar is genoeg over te vinden.
maar dat ter zijde.
Ik denk dat Ebuddy of AJAX of een push techniek zal gebruiken, die ondertussen dus een 2e proces opstart.
Zelf heb ik ooit een webmessenger gebouwd, werkte aardig, en dat zat als volgt in elkaar:
We hadden een Daemon (geschreven in C), die draaide altijd en luisterde naar sockets. De "client" (HTML/JS) deed AJAX requests naar een simpel PHP scriptje wat contact maakte met de Daemon om te vragen of er voor die sessie updates waren. Deze werden dan doorgegeven.
De C server zelf was ook weer lekker opgesplitst, we hadden 1 "moeder". Deze deed de communicatie tussen de echte daadwerkelijke MSN C-clients, en de PHP scripts. Deze moeder spawnde childs (fork()), waarmee via pipes gecommuniceerd werd. Iedere keer als er een update was, werd die over de pipe opgeslagen bij de moeder. Het ajax script zocht vervolgens af en toe (iedere paar seconden) contact met de moeder om te vragen of de bepaalde child updates had. Als die er waren werd dat uit die buffer gelezen.
Dus de complete rij was dus:
HTML/JS - PHP - "Moeder" - Child
De child deed de uiteindelijke socket communicatie met MSN.