hab ein problem; ich würde mir gerne einen kleinen socket-server in php bauen, um kleine flash-multiplayer-spielchen darüber laufen zu lassen.
bequemerweise gibt es 1. einen fertigen server in der php-doc und 2. mehrere recht schöne tutorials.
die scheinen aber alle nur singleuser zu unterstützen; mit blocking geht da anscheinend nicht mehr viel weiter. frohen mutes mach ich mich daran, das auf non-blocking umzuschreiben, scheitere aber früh:
socket\_read() unable to read from socket [10035]: Ein nicht blockierender Socketvorgang konnte nicht sofort ausgeführt werden.
**(...).php** on line **51**
weiss wer weiter? warum kommt das, wie kann ich das verhindern?
gibts da vielleicht grundlegende probleme, weil ich das auf win2k laufen lass?
socket_read() unable to read from socket [10035]: Ein nicht
blockierender Socketvorgang konnte nicht sofort ausgeführt
werden. (…).php on line 51
weiss wer weiter? warum kommt das, wie kann ich das
verhindern?
Mal davon abgesehen, dass ich PHP für dein Vorhaben absolut ungeeignet halte, vermutlich geht das socket_read() schief weil keine Daten da sind? Überprüfst du den Rückgabewert?
Folgendes hab ich in den Kommentaren auf php.net gefunden:
if you are using non blocking sockets, you need to be aware that
socket_accept will return 0, so you need to check what it returns is_resource() to see if it connected.
when using socket_read, you need to call socket_last_error($sock). If the return value is 11 (I assume EAGAIN), then It means that there is no data in the queue, but the socket is still alive.
gibts da vielleicht grundlegende probleme, weil ich das auf
win2k laufen lass?
zweitens: ich denk auch, dass du recht hast: php ist dafür wirklich so ungeeignet wie nur möglich. aber ich will wenigstens wissen, wies geht und eine kleine demo-app schreiben. wenn man seine grenzen nicht austestet, lernt man auch nicht mehr dazu.
den eintrag in den kommentaren hab ich auch grad gefunden. und danach gleich noch was besseres: socket_select(). - da wird non-blocking überflüssig, was noch viel besser ist.
mit dem socket_select() hatte ich noch kleinere probleme, es einzusetzen, bin aber jetzt über ein hervorragenes demo-script gestolpert.
grüße,
stefan
Mal davon abgesehen, dass ich PHP für dein Vorhaben absolut
ungeeignet halte, vermutlich geht das socket_read() schief
weil keine Daten da sind? Überprüfst du den Rückgabewert?
Folgendes hab ich in den Kommentaren auf php.net gefunden:
if you are using non blocking sockets, you need to be aware
that
socket_accept will return 0, so you need to check what it
returns is_resource() to see if it connected.
when using socket_read, you need to call
socket_last_error($sock). If the return value is 11 (I assume
EAGAIN), then It means that there is no data in the queue, but
the socket is still alive.
gibts da vielleicht grundlegende probleme, weil ich das auf
win2k laufen lass?