2013-04-16 2 views
5

У меня довольно большое создание веб-приложений с SproutCore и PHP в качестве backend. Теперь я хочу использовать websockets для обновления моего клиентского приложения в режиме реального времени. Из того, что я знаю, PHP действительно плохо справляется с постоянными соединениями. Поэтому я думал, что могу использовать Go для обработки соединений веб-сокетов и вызывать свои скрипты PHP каждый раз, когда будет получен запрос (это package, похоже, позволяет).PHP: используйте Golang для обработки соединений с websocket

Итак, мой первый вопрос: вы, ребята, думаете, что это хорошая идея (и жизнеспособная идея, я не смог найти таких людей), или я должен придерживаться PHP?

Если я использую Go для обработки соединений веб-сокетов, я также думал, что могу постепенно отходить от PHP, чтобы использовать Go (поскольку он намного быстрее PHP). Если я это сделаю, мне нужно будет вызвать некоторый пакет Go из PHP. Можно ли это сделать с помощью функции PHP exec? Есть ли способ лучше ? И снова, это хорошая идея?

ответ

9

Go подходит для серверов веб-серверов. Я создал серверы websocket в Go и был очень доволен тем, как все это получилось. У меня есть одна услуга, которая обрабатывает 300 тыс. Пользователей в месяц на сервере веб-сервера Go, и она едва использует 1% процессор микро-экземпляра Amazon AWS. Не может быть счастливее.

Для максимально возможного использования ресурсов для работы с серверами действительно нужны фреймворки, управляемые событиями, такие как Go и Node.js. Встраиваемые веб-процессы, такие как PHP, потребляют гораздо больше ресурсов, чем среда, управляемая событиями.

Если в какой-то момент вам нужно вызвать Go from PHP, я предлагаю использовать вызовы API. Хотя exec тоже будет работать.

+0

Казаться многообещающим. Таким образом, вы согласны со мной в том, что вызов PHP-скрипта каждый раз, когда запрос, полученный сервером веб-сервера Go, должен быть намного лучше, чем обработка соединения с websocket в PHP. –

+1

Я также использую Go для запуска моих серверов websocket (среди них [this] (http://dystroy.org:8004/) .Это очень эффективно и чисто. Я думаю, что использование PHP для этого было бы плохой идеей. –

+1

Calling PHP-скрипт каждый раз, когда запрос получает сервер веб-сервера Go, почти наверняка будет лучшим решением. Если какая-либо из ваших данных кэшируема, вы можете кэшировать ее в экземпляре Go для одного. Во-вторых, вы используете только ресурсы PHP достаточно долго, чтобы ответить на запрос, поэтому общее количество PHP-процессов должно быть значительно меньше, пока веб-узлы не будут постоянно подталкивать новые запросы к PHP. Наконец, вы ставите себе возможность перенести весь свой PHP-код, чтобы перейти со временем и реализуют огромную прибыль от эффективности. – Daniel

-1

Это старый вопрос, но мои два цента на эту тему ...

Существует очень хорошая PHP библиотека, которая делает именно то, что вы просите - WebSockets. Он называется Ratchet. Я бы не использовал node.js (более раздутый) или пошел, когда php может делать то же самое, и это тот язык, с которым мне больше всего нравится. В большинстве случаев небольшое увеличение производительности по сравнению с веб-сайтами не стоит переключать стек.

Другие полезные ссылки, если вы планируете использовать Ratchet:

+1

Ratchet очень плохо поддерживается, и их примеры не работают с последними версиями PHP (5.5+).Хотя хорошая идея, с текущей реализацией и огромным набором зависимостей, которые она требует, она работает не очень хорошо. – dearsina

Смежные вопросы