Как реализовать высокопроизводительное асинхронное серверное приложение на сокете в PHP? - PullRequest
8 голосов
/ 18 декабря 2011

С помощью 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 ..). Или это не стоит усилий?

1 Ответ

1 голос
/ 18 декабря 2011

Я думаю, что это типичный случай «Если у вас есть только молоток, все выглядит как гвоздь».

Как вы уже поняли, php не подходящий инструмент для работы. Возможно, вы все равно найдете способ сделать это, но, скорее всего, это будет грязно.

Так что используйте правильный инструмент для работы. Вы бы не использовали молоток, чтобы вбить винт в стену, не так ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...