|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.03 Kraj: Dragomer
|
Objavljeno: Sre Jun 23, 2010 9:51 pm Naslov sporočila: PHP - Kdor dela, naleti na probleme |
|
|
PHP - Kdor dela, naleti na probleme, bolje rečeno, da ti računalnik pokaže, česa vse še ne znaš.
V delovni zanki berem, kar pride od klienta po internetu z:
Koda: |
// beremo podatke od klienta
$input = socket_read($spawn, 1024, PHP_NORMAL_READ) or die("Could not read input\n");
|
Problem, na katerega sem naletel je ta, da php 'visi' na tem mestu ves čas, vse dokler kaj ne prileti od klienta. Vendar bi moral početi tudi druge stvari, in zato me tako 'visenje' moti.
Kako bi preveril, ali je sploh kaj brati iz linije, tako, da če ni nič, da zaobidem socket_read ukaz?
Hvala, ker imate potrpljenje z menoj.
Vilko |
|
Nazaj na vrh |
|
|
sundancer Član
Pridružen-a: Ned 08 Avg 2004 22:30 Prispevkov: 374 Aktiv.: 1.68 Kraj: Ljubljana
|
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.03 Kraj: Dragomer
|
Objavljeno: Čet Jun 24, 2010 6:27 am Naslov sporočila: |
|
|
Ali je potrebno kako zaporedje? naredil sem tako:
Koda: |
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listenineeg for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket);
if ($spawn === false) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg");
}
socket_set_nonblock($socket);
|
Toda še vedno 'visi' kasneje v delovni zanki pri:
Koda: |
// beremo podatke od klienta
$input = socket_read($spawn, 1024, PHP_NORMAL_READ) or die("Could not read input\n");
|
vse dokler ne pride kaj od klienta. |
|
Nazaj na vrh |
|
|
sundancer Član
Pridružen-a: Ned 08 Avg 2004 22:30 Prispevkov: 374 Aktiv.: 1.68 Kraj: Ljubljana
|
Objavljeno: Čet Jun 24, 2010 5:59 pm Naslov sporočila: |
|
|
poskusi namesto
Koda: |
socket_set_nonblock($socket); |
napisati
Koda: |
socket_set_nonblock($spawn); |
|
|
Nazaj na vrh |
|
|
red_mamba Član
Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.66 Kraj: Yogyakarta
|
Objavljeno: Čet Jun 24, 2010 9:26 pm Naslov sporočila: |
|
|
za to kar počneš ti rabiš narediti daemon
google -> "php socket daemon" oz "php socket server" _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.03 Kraj: Dragomer
|
Objavljeno: Pet Jun 25, 2010 10:33 am Naslov sporočila: |
|
|
sundancer je napisal/a: |
poskusi
Koda: |
socket_set_nonblock($spawn); |
|
Tudi tako 'visi' v branju, vse dokler nekaj ne dobi.
Rešujem zadevo tako, da klient vsakih 10 sekund pošlje nekaj. Ni elegantno, kaže nepoznavanje, pravzaprav kaže resnico...
Ja o demonih sem nekaj slišal, a veliko premalo, da bi si jih upal prijeti v roke.
Pozdrav |
|
Nazaj na vrh |
|
|
red_mamba Član
Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.66 Kraj: Yogyakarta
|
Objavljeno: Pet Jun 25, 2010 6:27 pm Naslov sporočila: |
|
|
dobiš že knjižnice, ki imajo vsa potrebna čreva že napisana. Samo implementiraš zadevo, pa se kasneje ukvarjaš z vsebino črev _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.03 Kraj: Dragomer
|
Objavljeno: Sob Jun 26, 2010 9:12 am Naslov sporočila: |
|
|
red_mamba je napisal/a: |
dobiš že knjižnice, ki imajo vsa potrebna čreva že napisana. Samo implementiraš zadevo, pa se kasneje ukvarjaš z vsebino črev |
O, ja, za take knjižnice je dobro vedeti. Kako naj guglam, da jih najdem?
O demonov poznam samo demone Dann-a Browna (Knjiga Angeli in demoni, branje za dopust) |
|
Nazaj na vrh |
|
|
red_mamba Član
Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.66 Kraj: Yogyakarta
|
Objavljeno: Sob Jun 26, 2010 10:11 am Naslov sporočila: |
|
|
"php socket server" je dober start
samo eno opozorilo. Socket server teče kot daemon na strežniku. Kar pomeni, da ga ne moreš pognati preko web browserja. Ampak ga poženeš kot proces ki teče v ozadju iz ukazne vrstice linux strežnika. Potem pa lahko komuniciraš s procesom preko njegovih socket povezav. Za več hkratnih povezav potrebuješ asinhrone socket povezave. kar pomeni da vsaka povezava na tvoj port komunicira s klientom + ustvari nov socket server, za naslednjega klienta, ki bi se rad povezal na strežnik.
Jaz se še nisem ubadal z php socket serverjem, me to še čaka. Vendar bom moral v bljižnji prihodnosti predelati C# server na PHP da bo lahko vse teklo na cenejši linux platformi _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 75 dni
Powered by phpBB © 2001, 2005 phpBB Group
|