2011-12-18 10 views
6

Dzięki nodejs bardzo łatwo jest stworzyć niezablokowany serwer TCP. Przykład z nodejs.org:Jak zaimplementować wysokowydajną asynchroniczną aplikację serwera gniazd w PHP?

var net = require('net'); 
var server = net.createServer(function (socket) { 
    socket.write("Echo server\r\n"); 
    socket.pipe(socket); 
}); 
server.listen(1337, "127.0.0.1") 

nodejs obsługuje select() -/poll() -/epoll() rzeczy dla ciebie, rutyny gnieździe i główną pętlę są zaimplementowane w C, więc jest to bardzo szybkie i wydajny.

nodejs jest super, ale chciałbym wdrożyć wysokiej wydajności serwera gniazda TCP w PHP, bo jestem PHP facet :)

Więc jedno Próbowałem już jest wdrożenie procedur gniazd w PHP, z socket_create_listen, socket_accept, socket_select itd. i główną pętlą w PHP. Działa to bardzo dobrze, ale nie sądzę, że jest to bardzo wydajne, ponieważ muszę używać wewnętrznie socket_select, który wywołuje funkcję C select, ale myślę, że lepiej byłoby epoll (używam Linuksa), ale epoll jest niedostępny jako funkcja PHP. (phpsocketdaemon i phpmio to 2 projekty, które znalazłem, które implementują dla ciebie procedury gniazdkowe).

Czy można to zrobić w sposób nodejs? Myślę o module PHP, który implementuje procedury pętli i gniazd w C, i wywołuje funkcje wywołania zwrotnego PHP dla zdarzeń (onread, onerror ..). Czy też nie jest to warte wysiłku?

+2

/wysokiej wydajności serwer gniazd TCP w PHP/wygląda jak oksymoron, jeśli kiedykolwiek widziałem. –

+2

Jako fan PHP, tak jak ja, naprawdę nie był przeznaczony do tego rodzaju użytkowania. Możesz być w stanie zaimplementować w nim serwer, ale powiedziałbym, że robienie tego w skuteczny sposób byłoby prawdziwym wyczynem. Jeśli PHP nie zostanie poddane poważnym zmianom architektonicznym, aby umożliwić tego rodzaju użycie, polecam użycie czegoś, co lepiej pasuje do zadania. – GordonM

Odpowiedz

2

Myślę, że jest to typowy przypadek: "Jeśli wszystko, co masz, to młotek, wszystko wygląda jak gwóźdź".

Jak już się zorientowaliście, php nie jest odpowiednim narzędziem do tej pracy. Prawdopodobnie możesz znaleźć sposób, aby to zrobić, ale najprawdopodobniej będzie brudny.

Używaj odpowiedniego narzędzia do pracy. Nie użyłbyś młota do wbicia śruby w ścianę, prawda?

+1

Bardziej jak ty nie jeździsz na rodeo z Humvee zamiast z koniem. –

+2

Zgadzam się, że PHP nie jest najlepszym narzędziem do tego. Ale programiści często stają w obliczu sytuacji, w których nie mają kontroli nad serwerem, że kod działa, więc instalacja nodejs lub innej alternatywy może nie być możliwa. Często doświadczam tego w mojej codziennej pracy dla agencji, w której piszemy kod i wysyłamy go do klientów, którzy wdrażają go w swoich własnych środowiskach i wiemy tylko, że nasz kod musi działać na standardowym stosie PHP. Czasami nie mamy nawet dostępu do phpinfo(). Uważam, że ważne jest, aby pozostać obiektywnym i znaleźć rozwiązanie problemu przed sobą. – dnshio

Powiązane problemy