Нужна помощь с сервером сокетов PHP! - PullRequest
0 голосов
/ 23 июля 2011

Привет, я пишу сервер сокетов, На данный момент у меня есть 2 варианта

  1. Перейти с PHP

  2. Перейти с C ++


Мне нужно знать, что из них является более надежным и масштабируемым. После долгих поисков в Google я обнаружил, что в значительной степени C ++ может позаботиться о моих потребностях в Scale, но дело в том, что C ++ требует гораздо большего кодирования, чем PHP Более того, развертывание на C ++ немного сложнее.

PHP звучит многообещающе (поскольку нативный API для SQL и SOCKETS также легче развертывать на кроссплатформенных платформах), но я понятия не имею, насколько масштабируемым может быть сервер на базе PHP. В настоящий момент я хочу поддерживать как минимум 1k - 2k одновременные соединения. Может ли PHP принять эту нагрузку?

Также есть ли способ реализовать многопоточность в PHP (чтобы я мог разделить рабочую нагрузку на 2 или более потоков, а не на 1 перегруженный поток, содержащий всех пользователей и запросы).


В случае необходимости Мой сервер - базовая машина.

Процессор: AMD Sempron 3000 +

ОЗУ: 2 ГБ

HDD: 80 гигов

Я планирую перейти на более быстрый сервер через некоторое время.

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 23 июля 2011

PHP, безусловно, плохой выбор - без потоков - ваша базовая архитектура заключается в том, чтобы fork () обрабатывал каждое соединение.Не весело.

C ++ - это, пожалуй, верный путь, хотя вы можете использовать другие интерпретируемые языки и оценивать их.

Прежде чем приступить к написанию чего-либо на C ++, я бы определенно рассмотрел управляемый событиями подход на основе javascript на стороне сервера (см. http://nodejs.org), или, возможно, что-то на python (витой?) Или на основе ruby.

0 голосов
/ 23 июля 2011

В PHP нет многопоточности, и 2k-клиенты "убьют" один скрипт.

C ++ хорошо, для многих (легких) задач один поток с демультиплексированием epoll является самым быстрым способом, если нет, то есть предварительная нить (например, prefork buth с потоками), форк нужен только если одно ядро ​​процессора не способен обслуживать все запросы. Напишите код сокета с помощью конечного автомата, чтобы вы могли играть с различными реализациями и переключаться между однопоточным и многопоточным поведением.

0 голосов
/ 23 июля 2011

на Java у вас нетти и мина

0 голосов
/ 23 июля 2011

Я бы не стал использовать PHP для этого.В PHP нет встроенной поддержки многопоточности.Перейти с C ++ или, может быть, Java.

...