С помощью nodejs очень легко создать неблокирующий TCP-сервер. Пример из nodejs .org:
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 обрабатывает элементы select () - / poll () - / epoll () за вас, процедуры сокетов и основной цикл реализованы на C, так что это очень быстро и эффективно.
nodejs - это отлично, но я хотел бы реализовать высокопроизводительный сервер сокетов TCP на PHP, потому что я парень PHP :)
Итак, я уже пробовал реализовать процедуры сокетов в PHP с socket_create_listen
, socket_accept
, socket_select
и т. д. и основной цикл в PHP. Это работает очень хорошо, но я не думаю, что это очень эффективно, потому что мне приходится использовать socket_select
, который вызывает внутреннюю C-функцию select
, но epoll
Думаю, было бы лучше (я использую Linux), но epoll
недоступен как функция PHP.
( phpsocketdaemon и phpmio - это 2 проекта, которые, как я обнаружил, реализуют для вас процедуры сокетов).
Можно ли сделать это способом nodejs? Я думаю о модуле PHP, который реализует процедуры цикла и сокета в C и вызывает функции обратного вызова PHP для событий ( onread
, onerror
..). Или это не стоит усилий?