www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

PHP - Kdor dela, naleti na probleme

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Linux, unix razprave
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.03
Kraj: Dragomer

PrispevekObjavljeno: Sre Jun 23, 2010 9:51 pm    Naslov sporočila:  PHP - Kdor dela, naleti na probleme Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
sundancer
Član
Član



Pridružen-a: Ned 08 Avg 2004 22:30
Prispevkov: 374
Aktiv.: 1.68
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jun 23, 2010 10:01 pm    Naslov sporočila:   Odgovori s citatom

http://www.php.net/manual/en/function.socket-set-nonblock.php

izvajanje tvoje kode se ustavi, ker je socket po defaultu v blocking nacinu
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.03
Kraj: Dragomer

PrispevekObjavljeno: Čet Jun 24, 2010 6:27 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
sundancer
Član
Član



Pridružen-a: Ned 08 Avg 2004 22:30
Prispevkov: 374
Aktiv.: 1.68
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jun 24, 2010 5:59 pm    Naslov sporočila:   Odgovori s citatom

poskusi namesto
Koda:
socket_set_nonblock($socket);

napisati
Koda:
socket_set_nonblock($spawn);
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.66
Kraj: Yogyakarta

PrispevekObjavljeno: Čet Jun 24, 2010 9:26 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.03
Kraj: Dragomer

PrispevekObjavljeno: Pet Jun 25, 2010 10:33 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.66
Kraj: Yogyakarta

PrispevekObjavljeno: Pet Jun 25, 2010 6:27 pm    Naslov sporočila:   Odgovori s citatom

dobiš že knjižnice, ki imajo vsa potrebna čreva že napisana. Samo implementiraš zadevo, pa se kasneje ukvarjaš z vsebino črev Very Happy
_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.03
Kraj: Dragomer

PrispevekObjavljeno: Sob Jun 26, 2010 9:12 am    Naslov sporočila:   Odgovori s citatom

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 Very Happy


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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.66
Kraj: Yogyakarta

PrispevekObjavljeno: Sob Jun 26, 2010 10:11 am    Naslov sporočila:   Odgovori s citatom

"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 Mr. Green

_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Linux, unix razprave Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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