Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PHP skripta da osluskuje neki port i primi UDP paket?

[es] :: PHP :: PHP skripta da osluskuje neki port i primi UDP paket?

Strane: 1 2

[ Pregleda: 4497 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Kursulla
Pancevo

Član broj: 94571
Poruke: 46
*.adsl.verat.net.



+1 Profil

icon PHP skripta da osluskuje neki port i primi UDP paket?25.03.2010. u 21:59 - pre 170 meseci
Kao sto rekoh u naslovu, kako da uradim da mi php skripta osluskuje port i procesuira informacije koje stizu po njemu.
Rec je o UDP protokolu.

Nasao sam neke primere o tome, medjutim, nisu mi bili od pomoci!

Na kraju, web serveru ce podatke slati zasebno parce hardvera, ali trenutno ga nemam.
Kako da testiram?

Da fajl postavim u lokalu (localhost)?
Kako da simuliram slanje podataka?

Pokusavao sam preko umrezenih racunara: na jednom da pokrenem skriptu, a sa drugog da probam da pristupim preko browsera, ali mislim da to nema smisla jer se prima preo UDP!

Kao sto vidite, mnooogo sam zbunjen i sve mi je ovo konfuzno!

Dajte neke konkretne primere, ili me uputite na njih, pocupacu i ovo malo kose na glavi!!!

Ili aj da pojednostavim:
imam dva kompa u mrezi, na njima xampp.
kako da sa jednog posaljem, a na drugom prihvatim podatak preko UDP protokola!?

[Ovu poruku je menjao Kursulla dana 26.03.2010. u 01:20 GMT+1]
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?26.03.2010. u 17:05 - pre 170 meseci
Skripta mora biti stalno pokrenuta ako želiš da ona stalno prima podatke.

Potrebno ti je da napraviš socket, uradiš socket_bind i pokreneš socket_listen. Konekciju prihvataš sa socket_accept, i na raspolaganju ti je socket_read/socket_write.

Ako želiš više istovremenih konekcija, verovatno ćeš želeti da koristiš socket_set_nonblock i u while petlji socket_select da izabereš one sa kojih možeš da pročitaš podatke.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Kursulla
Pancevo

Član broj: 94571
Poruke: 46
*.adsl.verat.net.



+1 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?26.03.2010. u 22:21 - pre 170 meseci
Kako da bude stalno aktivna?


 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?26.03.2010. u 22:49 - pre 170 meseci
Tako što ćeš socket_accept/socket_select pozivati u beskonačnoj petlji.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?26.03.2010. u 23:43 - pre 170 meseci
Beskonacna petlja???? To bas nece proci.
Cron i sleep kombinacija. Zavisi za koje brzine treba da je odziv.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?26.03.2010. u 23:50 - pre 170 meseci
VladaSu, o čemu govoriš? Ako njegov PHP daemon mora biti stalno dostupan (radi prijema podataka), kako to da izvede osim upotrebom beskonačne petlje u kojoj će prihvatati konekcije po napravljenom socketu koji osluškuje i sa njih primati podatke?
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Kursulla
Pancevo

Član broj: 94571
Poruke: 46
*.adsl.verat.net.



+1 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?26.03.2010. u 23:53 - pre 170 meseci
I ja sam razmisljao o Cronu, ali sam shvatio da nece ici, bas kao sto Goran kaze!

OK.Napisem skriptu. a kako da je "pustim u rad"?

Da je pozovem preko browsera? Mislim da to nece ici!?

Slobodno se smejte ako lupam! :D
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?27.03.2010. u 00:17 - pre 170 meseci
Moraš da je pokreneš nezavisno od veb servera, inače će te runtime limit sprečiti u poduhvatu. Dakle možeš da je okineš iz terminala, ili ako nemaš takav pristup serveru, pokreneš je iz druge skripte sa system("/usr/bin/php skripta.php &") pozivom. Zavisno od postavke servera može opet postojati limit na korisničke procese ili putanja do php intepretatora može biti drugačija. U tom slučaju ćeš morati da menjaš postavke, server ili da se snalaziš sa tajmiranim pokretanjem druge skripte čim se prva ugasi.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?31.03.2010. u 23:08 - pre 170 meseci
Citat:
Goran Rakić: VladaSu, o čemu govoriš? Ako njegov PHP daemon mora biti stalno dostupan (radi prijema podataka), kako to da izvede osim upotrebom beskonačne petlje u kojoj će prihvatati konekcije po napravljenom socketu koji osluškuje i sa njih primati podatke?


Ja nemam pojima kako ces pokrenuti php skriptu koja u sebi ima beskonacnu petlju a da ne pukne.

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

Whois

Član broj: 92214
Poruke: 37
*.dynamic.panet.rs.



Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?01.04.2010. u 03:35 - pre 170 meseci
Code:

set_time_limit(0);

 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
*.dynamic.isp.telekom.rs.

Sajt: https://avramovic.info


+46 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?01.04.2010. u 10:05 - pre 170 meseci
S tim što će ti to (set_time_limit) raditi samo ako imaš svoj dedicated server koji si ti konfigurisao (čitaj: ni jedan normalan hosting provajder ti neće dozvoliti da ukineš time limit). I pored toga, moraćeš da držiš otvorenu tu stranicu u browseru sve vreme (za ovo nisam siguran, ali mislim da je tako) :S
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?01.04.2010. u 13:44 - pre 170 meseci
Naravno da neće tu stranicu pokretati iz preglednika, već kao skript na serveru. Šta više to sam i napisao uz uslov "moraš".
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
109.93.250.*



+218 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?01.04.2010. u 16:11 - pre 170 meseci
Ne znam da li u ranijim verzijama, ili sam pomesao sa nekim drugim programskim jezikom, samo se nesto secam da se skripta sama gasila kada naidje na mrtvu petlju.
Probao i mrtva petlja prolazi u php-u ali procesor je skocio na 100% i tu se zakucao.
Inace moze skripta da se pokrene iz browser-a i da prilikom gubitka konekcija ona i dalje nastavi sa izvrsavanjem.
sleep mora da se koristi da ne bi server bio preopterecen.

primer sa php.net
Code:

<?php
    set_time_limit (0);//run script forever
    ignore_user_abort ();//run script in background
    $i = 0;
    echo "start\n";
    while (1) {
        $i++;
        echo $i, "\n";
        $sleep = sleep (3);
        if ($sleep == 0 or $sleep or $sleep == FALSE) continue;
        if (connection_aborted ()) continue;
        if (connection_status () != 0) continue;
    }
?>


ovde moze da prilikom prekida konekcije pokrene opet samu sebe.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

Kursulla
Pancevo

Član broj: 94571
Poruke: 46
77.243.16.*



+1 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?01.04.2010. u 21:30 - pre 170 meseci
Hm...kada se uradi socket_recvfrom, proces ostaje "zaboden" dok ne registruje dolazeci podatak!

U tom slucaju, nema uposlenog cekanja, pa sama petlja ne pretstavlja problem.

Da li gresim?
 
Odgovor na temu

Man-Wolf
Mihailo Joksimovic
Beograd

Član broj: 17016
Poruke: 873
*.dynamic.sbb.rs.



+13 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?02.04.2010. u 14:36 - pre 170 meseci
Mozda malo glupo pitanje, ali - zasto si odlucio da ovo radis preko PHP-a ? Slanje paketa - ok, moze, ali, primanje paketa - kao sto si vec primetio, malo moze da bude za*ebano.

PHP je napravljen sa idejom da se parsira (izvrsi) skripta i ugasi, al da konstantno radi i osluskuje neki port, huh ....

Koriscenje CRON-a, nisam bas siguran kolko bi pomoglo, jer, sta ako se desi da u trenutku kad se server (skripta koja osluskuje) ugasi, client pokusa da posalje paket ? Mislim da bi klijent odmah bacio gresku (osim ako mu ne nabudzis da proba recimo iz 3x). Al opet - razmisli da li je PHP najbolje resenje ? Mozda da pokusas sa nekim drugim laksim jezikom koji podrzava Thread-ove izmedju ostalog (Ruby/Python ja mislim da podrzavaju, ali - samo mislim).

Btw, nasao sam jedan dobar tutorial o kreiranju servera u PHP-u, pa ako ga vec nisi procitao, baci pogled - http://devzone.zend.com/article/1086

Btw2, pogledaj ono fork-ovanje, nikad ga nisam koristio ali sam cuo da predstavlja neku imitaciju Thread-ova ....

Btw3, ni ne pomisljaj da skriptu pokreces iz Browser-a :-D obavezno iz CLI-a i kao BG process (kao sto ti vec rece Goran) ;)

Pozz i javi sta si uradio/odlucio ;)
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?02.04.2010. u 15:16 - pre 170 meseci
Citat:
Kursulla: Hm...kada se uradi socket_recvfrom, proces ostaje "zaboden" dok ne registruje dolazeci podatak!

U tom slucaju, nema uposlenog cekanja, pa sama petlja ne pretstavlja problem.

Da li gresim?


Ne grešiš, ali to je samo deo cele priče, a ja nisam siguran da si toga svestan. Razlikuje se način rada sa „konektujućim“ (SOCK_STREAM uz npr. TCP) i „nekonektujućim“ (SOCK_DGRAM uz npr. UDP) priključcima. Za druge je dovoljno socket_recvfrom, dok za prve moraš da imaš priključak konekcije (najpre socket_listen, pa onda socket_accept koji ti vrati novi priključak za konekciju kada se klijent zakači). Tek onda možeš da koristis socket_recv/socket_recvfrom.

Odgovor na tvoje pitanje, da svako blokirajuće čekanje ne predstavlja problem.

Edit: tek sada vidim UDP u naslovu. ;)


Citat:
Man-Wolf
Mozda malo glupo pitanje, ali - zasto si odlucio da ovo radis preko PHP-a ? Slanje paketa - ok, moze, ali, primanje paketa - kao sto si vec primetio, malo moze da bude za*ebano.

PHP je napravljen sa idejom da se parsira (izvrsi) skripta i ugasi, al da konstantno radi i osluskuje neki port, huh ....


Ne postoji ni jedan razlog zašto ovo ne bi radilo iz PHP-a koji uredno prezentuje celokupan Unix Sockets sistemski interfejs. Razlozi da se odluči za PHP mogu biti u tome da za obradu komunikacije može da koristi već napisan PHP kod. I kada konstantno radi, skripta se samo jednom kompilira, ništa se neobično tu ne dešava.

Višenitno i višeprocesno programiranje nisu tesno vezani za prijem i slanje podataka, ali se često koriste kada je potrebno istovremeno primiti i duže obrađivati veći broj konekcija kao alternativa neblokirajućim funkcijama i redovima sa čekanjem. Postoje razni stilovi, sve zavisi od zahteva.

Zbog globalne brave (GIL), niti u Python-u su pseudoparalelne, dok su procesi analogni onima u PHP-u (man 2 fork).



[Ovu poruku je menjao Goran Rakić dana 02.04.2010. u 16:36 GMT+1]
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

agvozden
Aleksandar Gvozden
founder
Info-G
Beograd

Član broj: 37813
Poruke: 1122
91.150.121.*

Sajt: www.gvozden.info


+68 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?02.04.2010. u 19:16 - pre 170 meseci
Jel neko uopšte ovo pokušavao?

http://www.phpclasses.org/browse/package/3736.html

Čovek kaže da je uradio DNS server, možda ovo i radi stvarno?
 
Odgovor na temu

b0ris
Boris Vujicic
Senior PHP programer
Beograd

Član broj: 126587
Poruke: 158
*.dynamic.sbb.rs.



+2 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?02.04.2010. u 20:23 - pre 170 meseci
http://php.net/manual/en/function.pcntl-fork.php
Probaj koristeci fork, to mi nekako zvuci kao najlogicnije resenje (kao sto je neko vec naveo).

Sta tacno pokusavas da uradis (mislim zasto ti to treba)?
Mozda je bolji neki drugi jezik?
---------------------------------------------------------------------
Just do it.
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?02.04.2010. u 20:44 - pre 170 meseci
Borise, kakve fork ima veze sa temom?
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Kursulla
Pancevo

Član broj: 94571
Poruke: 46
77.243.16.*



+1 Profil

icon Re: PHP skripta da osluskuje neki port i primi UDP paket?03.04.2010. u 01:12 - pre 170 meseci
Ljudi, "rasiriste ga do Moravu"! :D

Ovako:
poseban hardver salje podatke u intervalima od oko 15-20 sec serveru.
Mora se koristiti UDP iz dva razloga: prvi je kolicina podataka koju utrosi tcp/ip prenoseci gomilu, u ovom slucaju, nepotrebnih kontrolnih bitova; drugi razlog je taj sto udp ne zahteva konekciju sto je poseban zahtev jer uredjaj ne treba da trosi vreme na konekciju pri svakom slanju (15-20 sec)

Prihvatanje bi izgledalo ovako:

Code:

error_reporting(E_ALL | E_STRICT);

$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($socket, '127.0.0.1', 2224);
$from = 'Sensor x';

$i=0;
while($i<10){
    echo("Ceka podatke!!!");
    socket_recvfrom($socket, $buf, 40, 0, $from, 2224);
       // obraditi podatke
}


Kako proces ostaje "zaboden" na socket_recvfrom, to nece doci do nepotrbnog "trcanja" kroz petlju.

Pitanje jeste da li ce ovako mali interval prijema podataka mozda izazvati neke probleme server u vidu prevelikog zauzeca memorije ili cpu!?
Na lokalnom serveru, do toga nije dolazilo, ali videcu da li ce biti problema na hosterovom serveru.

U principu, mogao bih podesiti da se u odredjenom vremenskom intervalu proces sam killuje, a pre toga pokrene novi sa istom funkcijom.

 
Odgovor na temu

[es] :: PHP :: PHP skripta da osluskuje neki port i primi UDP paket?

Strane: 1 2

[ Pregleda: 4497 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.