Daniel Częstki

Daniel Częstki senior php developer

Temat: curl na lokalnym serwerze

mam cos takiego:
http://site.pl/plik.php
http://site.pl/curl.php

w curl.php jest wywolywane pobrannie wyniku za pomoca CURL wyswietlonych pod adresem http://site.pl/plik.php.

Na ile jest to wydajne i w miare bezproblemowe ?
Nigdy sie nad tym nie zastanawialem, ale jak wygląda droga przesylania informacji (protokol HTTP) w wywolanej instrukcji CURL, jezeli dane przesylamy wewnątrz danej strony/serwera ?

Generlanie chce zrobić taki wewnętrzny podsystem przekazywania danych w którym zawrze podstawowe metody, aby uniezaleznic sie od includowania niepotrzebnych klas, które to będą includowane z poziomu plik.php

A moze lepiej zrobić to za pomocą SOAP ?Daniel C. edytował(a) ten post dnia 21.04.08 o godzinie 16:52

konto usunięte

Temat: curl na lokalnym serwerze

Droga przesyłania wydaję mi się że zależy od konfiguracji sieci na serwerach i routerach.

Nie bardzo rozumiem co chcesz uzyskać...
Stanisław P.

Stanisław P. Software designer

Temat: curl na lokalnym serwerze

Daniel C.:
Nigdy sie nad tym nie zastanawialem, ale jak wygląda droga przesylania informacji w wywolanej instrukcji CURL, jezeli dane przesylamy wewnątrz danej strony ?
np. mam
http://site.pl/plik.php
http://site.pl/curl.php

Dokładnie tak jak normalny request z zewnątrz, tyle że praktycznie nieograniczonym pasmem idą. No chyba, że site.pl wskazuje tak naprawdę na jakiś host rozdzielający ruch i dopiero stamtąd trafia na zwykły serwer, wtedy pakiety idą przez sieć 2 razy.
Na ile jest to wydajne i w miare bezproblemowe ?

Mało wydajne, jeśli chcesz to po to, żeby ograniczyć includowanie... W jakim znaczeniu "bezproblemowe"? Masz więcej problemów, żeby to oprogramować, będzie wolniejsze, będzie używać więcej zasobów. Jedyne co zyskasz, to właśnie oddzielenie się od podstawowego skryptu, więc jak coś padnie, to padnie tylko jedno zapytanie.
A moze lepiej zrobić to za pomocą SOAP ?

Jeśli już robić SOA wogóle, to tak - w dobrym stylu i porządną biblioteką. Albo soap albo przesyłanie zserializowanych danych.

Ale jeśli masz tylko jeden host i jedyne co Cię gryzie to includowane niepotrzebnie klasy, to raczej w złym kierunku szukasz... Swoją drogą dlaczego includujesz niepotrzebnie klasy? ;)
Daniel Częstki

Daniel Częstki senior php developer

Temat: curl na lokalnym serwerze

bardziej mi chodzi o dostep do pewnych funkcji z wielu miejsc na serwerze - z wielu subdomen ale nie chce udostępniać pełnych klas tylko zbudować osobny interfejs komunikacyjny.

na razie mam zrobiony interfejs komunikacyjny na CURL i zaciekawiło mnie jak wygląda droga przesyłanych danych.

Np. mam serwer wirtualny na home.pl, ddr.pl czy inny ehost.pl czy gdziekolwiek.
Zastanawia mnie jak wygląda trasa przesyłania danych przy uzyciu CURL jezeli wszystko dzieje sie w ramahc 1 domeny/subdemyny zlokalizowanej na tym samym serwerze.
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: curl na lokalnym serwerze

Jeśli masz shella to zapuść sobie traceroute i będziesz wiedzieć ;-)

konto usunięte

Temat: curl na lokalnym serwerze

Przemek Szalko:
Jeśli masz shella to zapuść sobie traceroute i będziesz wiedzieć ;-)

Taa na home.pl ;-)
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: curl na lokalnym serwerze

A wykonywać poleceń konsolowych z poziomu PHP też tam nie można?
Lipa jakaś :)

konto usunięte

Temat: curl na lokalnym serwerze

No 'date' tak ale traceroute nie ( chyba jest domyślnie ukryty dla normalnego użytkownika )
Wojciech Sznapka

Wojciech Sznapka CTO @ STS Zakłady
Bukmacherskie

Temat: curl na lokalnym serwerze

Daniel C.:
bardziej mi chodzi o dostep do pewnych funkcji z wielu miejsc na serwerze - z wielu subdomen ale nie chce udostępniać pełnych klas tylko zbudować osobny interfejs komunikacyjny.

na razie mam zrobiony interfejs komunikacyjny na CURL i zaciekawiło mnie jak wygląda droga przesyłanych danych.

Np. mam serwer wirtualny na home.pl, ddr.pl czy inny ehost.pl czy gdziekolwiek.
Zastanawia mnie jak wygląda trasa przesyłania danych przy uzyciu CURL jezeli wszystko dzieje sie w ramahc 1 domeny/subdemyny zlokalizowanej na tym samym serwerze.

Szanowny kolego szybko uczący się OOP :-P Proponuję jeszcze raz przyjrzeć się możliwościom, jakie daje Ci dziedziczenie, interfejsy, asocjacje, polimorfizm. Weź do ręki jeszcze raz jakąś dobrą książkę o OOP dla PHP i napewno zrezygnujesz z robienia webserwisów dla zastosowań o których piszesz tutaj :-)
Daniel Częstki

Daniel Częstki senior php developer

Temat: curl na lokalnym serwerze

Wojciech Sznapka:
Proponuję jeszcze raz przyjrzeć się możliwościom, jakie daje Ci dziedziczenie, interfejsy, asocjacje, polimorfizm.

fajne hasła ale akurat dziedziczenie nic tutaj by nie dało ;) Samym polimorfizmem tez nie zalatwie sprawy, bo jest to pojecie bardzo ogolne. Problem w tym, ze mi wlasnie chodzi o to, zeby zbudować osobny (całkowicie niezależny) interfejs. Ale pytanie dotyczyło zgoła czego innego.
ok. sprawdzę sobie. dzieki za info.Daniel C. edytował(a) ten post dnia 21.04.08 o godzinie 19:54
Jarosław Lisicki

Jarosław Lisicki programista,
Gadu-Gadu

Temat: curl na lokalnym serwerze

Podejrzewam, że chodzi o jakiś rodzaj wewnętrznego api:) Generalnie takie coś będzie zżerać 2 razy wiecej procesów php-a (po jednym dla curl.php i plik.php - dobrze jest dać timeout dla curl-a). Do tego narzut na protokól HTTP, itd. Oczywiście curl pobierać będzie tak jak przeglądarka. Idealne rozwiązanie to to nie jest. Może by się udało zrobić taką magię z procesem php (plik.php), który by nasłuchiwał na sockecie i forkował dla każdego żądania. plik.php tworzy socket i robi socket_listen, a plik curl.php, laczy sie do tego socketu - pomija sie wtedy apache i można własny protokół sobie zrobić nawet:). Można też użyć exec(). Taka sztuka dla sztuki w sumie. Jeżeli kolega posiada odpowiednią ilość zasobów to jednak curl.Jarosław Lisicki edytował(a) ten post dnia 21.04.08 o godzinie 21:43
Jarosław Rafa

Jarosław Rafa senior software
engineer, Motorola
Solutions Systems
Polska

Temat: curl na lokalnym serwerze

Daniel C.:

Np. mam serwer wirtualny na home.pl, ddr.pl czy inny ehost.pl czy gdziekolwiek.
Zastanawia mnie jak wygląda trasa przesyłania danych przy uzyciu CURL jezeli wszystko dzieje sie w ramahc 1 domeny/subdemyny zlokalizowanej na tym samym serwerze.

Jeżeli "ten sam serwer" faktycznie oznacza fizycznie tę samą maszynę, to trasa przesyłania danych powinna zamykac się całkowicie w obrebie stosu TCP/IP systemu operacyjnego, w ogóle fizycznie nie dotykając sieci. Oczywiście narzuty na HTTP, TCP/IP itd. pozostają ale na warstwę MAC już to nie powinno być przekładane - oprogramowanie powinno porozkładac pakiety do poziomu warstwy IP i od razu poskładac z powrotem.
Ja w ogóle jak potrzebuje czasami odwołać sie curl-em do lokalnej maszyny, to uzywam "http://localhost/..." bo obsługa wirtualnego interfejsu lo0 jest szybsza niż eth0. Ale ja moge sobie na to pozwolić wiedząc, że faktycznie mam do czynienia z fizycznie tą samą maszyną, a zdaje mi się - tak jak już tu ktoś pisał w innym poscie - że w przypadku kombinatów typu home.pl, to to, ze coś jest pod tą samą domeną bynajmniej takiej gwarancji nie daje...
Daniel Częstki

Daniel Częstki senior php developer

Temat: curl na lokalnym serwerze

Jarosławie - dzięki ogromne. Tutaj mam pewność że będzie to fizycznie ta sama maszyna. Poza tym - faktycznie jest tak, jak mówisz. Traceroute pokazuje tylko 1 wartość. Takie wywołanie nie wychodzi poza obręb serwera.
Wojciech K.

Wojciech K. realizator pomysłów
własnych

Temat: curl na lokalnym serwerze

Daniel C.:
mówisz. Traceroute pokazuje tylko 1 wartość. Takie wywołanie nie wychodzi poza obręb serwera.

ale to wszystko jednak trochę zasobów żre.

normalnie (np. przy includowaniu) sprawa nie wychodzi "poza apacza" - tzn. pojawiają się tylko dodatkowe operacje I/O na plikach - a w Twoim przypadku dochodzi jeszcze zawracanie głowy kernelowi w kwestiach stosu TCP/IP (filtry, routing), jeśli konfiguracja operuje na nazwach kanonicznych, to jeszcze do tego zawracana jest głowa serwerowi DNS, do tego zostaje jeszcze odpalony (lub "obudzony") dodatkowy proces apache (zamiast jednego procesu są dwa, albo i więcej) no i trzeba pamiętać o logach (żeby nie rosły z podwójną szybkością, trzeba te lokalne requesty "obsługiwać" jakimś virtualhostem na którym powyłączane są wszelkie zasobożerne czynności) - jeśli na maszynie jest duże obciążenie, może dojść do sytuacji, że ten "drugi" proces będzie długo wstawał, albo serwer odmówi obsłużenia tego requestu z powodu przekroczenia limitów - i będzie kicha.

a może skompiluj sobie moduł do php? będziesz miał "funkcje dostępne z wielu subdomen" ;)
Piotr P.

Piotr P. Software Developer

Temat: curl na lokalnym serwerze

Wojciech Sznapka:
Np. mam serwer wirtualny na home.pl, ddr.pl czy inny ehost.pl czy gdziekolwiek.
Zastanawia mnie jak wygląda trasa przesyłania danych przy uzyciu CURL jezeli wszystko dzieje sie w ramahc 1 domeny/subdemyny zlokalizowanej na tym samym serwerze.

Szanowny kolego szybko uczący się OOP :-P Proponuję jeszcze raz przyjrzeć się możliwościom, jakie daje Ci dziedziczenie, interfejsy, asocjacje, polimorfizm. Weź do ręki jeszcze raz jakąś dobrą książkę o OOP dla PHP i napewno zrezygnujesz z robienia webserwisów dla zastosowań o których piszesz tutaj :-)

Danielowi bardziej chyba chodzi o rozwiązanie jakie daje D-Bus.
Chociaż z drugiej strony... Apache jakby nie patrzeć jest demonem i komunikacja z nim oparta jest na requestach http, więc jakaś logika w tym rozumowaniu jest :)
Daniel Częstki

Daniel Częstki senior php developer

Temat: curl na lokalnym serwerze

Wojciech K.:
Daniel C.:
mówisz. Traceroute pokazuje tylko 1 wartość. Takie wywołanie nie wychodzi poza obręb serwera.

ale to wszystko jednak trochę zasobów żre.

normalnie (np. przy includowaniu) sprawa nie wychodzi "poza apacza" - tzn. pojawiają się tylko dodatkowe operacje I/O na plikach - a w Twoim przypadku dochodzi jeszcze zawracanie głowy kernelowi w kwestiach stosu TCP/IP (filtry, routing), jeśli konfiguracja operuje na nazwach kanonicznych, to jeszcze do tego zawracana jest głowa serwerowi DNS, do tego zostaje jeszcze odpalony (lub "obudzony") dodatkowy proces apache (zamiast jednego procesu są dwa, albo i więcej) no i trzeba pamiętać o logach (żeby nie rosły z podwójną szybkością, trzeba te lokalne requesty "obsługiwać" jakimś virtualhostem na którym powyłączane są wszelkie zasobożerne czynności) - jeśli na maszynie jest duże obciążenie, może dojść do sytuacji, że ten "drugi" proces będzie długo wstawał, albo serwer odmówi obsłużenia tego requestu z powodu przekroczenia limitów - i będzie kicha.

a może skompiluj sobie moduł do php? będziesz miał "funkcje dostępne z wielu subdomen" ;)

no ale SOAP raczej tez na to nie pomoze - mam racje ?
to w takim razie w czym najlepiej robic webserwisy ?
Rafał Korszuń

Rafał Korszuń co-owner @ Kleder

Temat: curl na lokalnym serwerze

Pytanie nie "czym" najlepiej ale "po co"?

Jeżeli aplikacja działa w całości na 1 serwerze to moim znaniem nie ma sensu budowania webserwisu.

Jednak jeżeli aplikacja w niedalekiej przyszłości będzie działać na kilku serwerach tak że każdy z nich będzie odpowiedzialny za inną usługę i niekoniecznie wszystkie będą musiały być stworzone w 1 języku to SOA ma jak najbardziej sens.

przykładem może być taka architektura warstwowa:

przeglądarka internetowa (ajax?) 0. warstwa
------------------------------------------
moduł składający stronę w całość 1.warstwa (serwer 1)
-------------------------------------------
| |
| dział newsów 2. warstwa (serwer 2)
-------------------------------------------
|
dział komentarzy 3. warstwa (3 serwery)

czyli jeżeli wystawienie serwisu ma sens to ok jak nie to po co?
Przy okazji SOAP ma dość spory narzut.
Jarosław Rafa

Jarosław Rafa senior software
engineer, Motorola
Solutions Systems
Polska

Temat: curl na lokalnym serwerze

Piotr P.:

Danielowi bardziej chyba chodzi o rozwiązanie jakie daje D-Bus.
Chociaż z drugiej strony... Apache jakby nie patrzeć jest demonem i komunikacja z nim oparta jest na requestach http, więc jakaś logika w tym rozumowaniu jest :)

A może RPC? Dosyc szybkie i efektywne... W obrębie jednej maszyny tez jak najbardziej można tego używać...
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: curl na lokalnym serwerze

Jarosław Rafa:

A może RPC? Dosyc szybkie i efektywne... W obrębie jednej maszyny tez jak najbardziej można tego używać...

Może szybkie, ale jak coś masz wywołać na zdalnym hoście to się nie opłaca.
Miałem takie RPC odpalone na jednej maszynie na której było około 70 serwisów korzystających z tego serwera RPC. Efekt był taki że Apache nie wyrabiał z requestami, ponieważ zbyt dużo było odwołań lokalnych (maszyna jedna, ale wiele różnych vhostów). Dla partnerów zdalnych RPC / SOAP jak najbardziej.

Jeśli coś ma stać w jednym miejscu to lepszym pomysłem jest wrzucenie biblioteki do include_path, napisanie fajnego autoloadera albo nawet klasy która zajmie się łączeniem tych wszystkich porozrzucanych plików w jeden działający kod.Przemek Szalko edytował(a) ten post dnia 30.04.08 o godzinie 09:00



Wyślij zaproszenie do