Сервер сокетов PHP против node.js: веб-чат

Я хочу запрограммировать HTTP-веб-чат, используя длительные HTTP-запросы (Comet), ajax и веб-сокеты (в зависимости от используемого браузера). База данных пользователя находится в mysql. Чат написан на PHP, за исключением, может быть, самого потока чата, который также может быть написан на javascript (node.js):

Я не хочу запускать php-процесс для каждого пользователя, поскольку нет хорошего способа отправлять сообщения чата между этими дочерними элементами php. Поэтому я подумал о написании собственного сервера сокетов на PHP или node.js, который должен иметь возможность обрабатывать более 1000 подключений (пользователей чата). Как чисто веб-разработчик (php) я мало знаком с сокетами, так как обычно позволяю веб-серверу заботиться о соединениях. Сообщения чата не будут сохраняться ни на диске, ни в mysql, а в ОЗУ в виде массива или объекта для максимальной скорости.

Насколько я знаю, нет возможности обрабатывать несколько соединений одновременно в одном процессе php (сервер сокетов), однако вы можете принимать большое количество подключений к сокетам и обрабатывать их последовательно в цикле (чтение и запись; входящее сообщение -> запись для всех подключений к сокету). Проблема в том, что, скорее всего, будет задержка с ~ 1000 пользователей, и операции mysql могут замедлить все это, что затем повлияет на всех пользователей.

Мой вопрос: Может ли node.js работать с сервером сокетов с большей производительностью? Node.js основан на событиях, но я не уверен, может ли он обрабатывать несколько событий одновременно (разве для этого не нужна многопоточность?) Или есть просто очередь событий. С очередью событий это было бы так же, как php: process user after user.

Я мог бы также создать php-процесс для каждой комнаты чата (гораздо меньше пользователей), но, кстати, есть однопоточные IRC-серверы, которые также могут обрабатывать тысячи пользователей. . (написано на C ++ или чем-то еще), так что, возможно, это также возможно и на php.

Я бы предпочел PHP, а не Node.js, потому что тогда проект будет только для php, а не на смеси языков программирования. Однако, если Node может обрабатывать соединения одновременно, я бы, вероятно, выбрал его.

18
задан hakre 20 December 2012 в 10:45
поделиться