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?
/wysokiej wydajności serwer gniazd TCP w PHP/wygląda jak oksymoron, jeśli kiedykolwiek widziałem. –
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