Является ли PHP-сокет подходящим вариантом для создания чата на основе PHP jQuery? - PullRequest
1 голос
/ 16 июля 2010

Я разрабатываю модуль чата для drupal. Я планирую предоставить несколько бэкэндов для обработки сообщений чата. Я изначально начал с AJAX и теперь включил в него технику длинных опросов. Потом я наткнулся на ape (движок ajax), и это выглядит многообещающе. Но для работы модуля чата потребуется установка ape на стороне сервера. Хотя я также включу это в качестве одного из бэкендов для чата, моя основная задача - найти решение, которое сможет обрабатывать приемлемое количество одновременных подключений к чату, БЕЗ внесения каких-либо изменений на стороне сервера, чтобы люди могли легко его использовать.

Я занимался серфингом в сети и наткнулся на программирование на PHP Socket, и это выглядит как приемлемый вариант.

  • Если я напишу чат-сервер на основе php, смогу ли я поддерживать соединение, которое может отправлять данные в обоих направлениях (с сервера на клиент и наоборот), используя только jQuery (вместе с ActionScript)? Очевидно, я не буду использовать AJAX на стороне клиента.
  • Кроме того, сколько соединений сервер сможет обрабатывать одновременно, если я напишу эффективный скрипт чата на основе php-сокета и скажу, что выделил для него 50 МБ ОЗУ?
  • Смогут ли люди на виртуальном хостинге запускать серверный код на основе php, потому что у них нет доступа к оболочке, как у нас есть возможность запустить cron?
  • Кроме того, я где-то читал, что php не является многопоточным языком, поэтому вы не должны использовать сокет вообще. Это правда?
  • Есть ли какой-то другой подход, который я могу использовать, и он будет более эффективным, чем это, без каких-либо изменений на стороне сервера?

Ответы [ 5 ]

2 голосов
/ 16 июля 2010

О чем вы должны подумать: каждое новое соединение будет блокировать процесс PHP.Таким образом, если вы устанавливаете сокет-соединение где-то и позволяете ему долго открываться, процесс PHP будет заблокирован, он не сможет принять другое соединение.Итак, если у вас было 50 процессов PHP, можно установить 50 соединений одновременно.

Именно поэтому я лично предпочитаю использовать Node.JS для кометных приложений, таких как чат ...

1 голос
/ 16 июля 2010

Является ли сокет PHP жизнеспособным вариантом для создания чата на основе PHP jQuery? - Нет:)

И учитывая ваши ограничения общего хоста и около 50 МБ ОЗУ, я бы предположил, что PHP на самом деле тоже не вариант.

На самом деле, HTTP на самом деле не идеален для такого рода вещей, HTTP - это протокол, основанный на запросах и ответах без сохранения состояния, а вам нужен постоянный протокол с отслеживанием состояния, такой как XMPP.

Вы можете «взломать» его с помощью веб-технологий, как вы уже сделали с long poll и ajax, который технически является единственным способом сделать это через HTTP, все другие варианты HTTP-чата: всегда непрерывный опрос по времени или длительный опрос - это единственный способ сделать это с настройкой http клиентского сервера.

Вы можете сделать это «более легким» способом, используя технологию, такую ​​как node.js (см. Демонстрацию чата node.js), это легче на стороне сервера ресурсов, но в некотором роде выбивает ваше требование к общему хосту. *

Или, вы можете сделать это с помощью технических специалистов, которые будут использовать сервер XMPP / Jabber на бэкэнде и клиент XMPP на основе flash / flex на внешнем интерфейсе - это легко поддерживает более 5000 подключений на бэкэнд-сервер , но снова уничтожается требованием общего хоста.

В долгосрочной и долгосрочной перспективе ответом веб-архитектуры является использование HTTP-сервера, кэша и клиента на всех устройствах, что сделало бы каждое устройство узлом в сети P2P, и все мы должны делать что угодно, но это еще далеко:)

Надеюсь, это поможет!

0 голосов
/ 21 июня 2012

Я думаю, что это могло бы работать, с php, jQuery, и некоторым SQL на сервере, а также с некоторыми фальсификациями

Хотя я бы использовал Ajax, а почему бы и нет? тогда вы могли бы пропустить розетки?

0 голосов
/ 16 июля 2010

PHP совсем не подходит для такого рода проблем. Вы можете написать демон, который использует функции pctnl для разветвления нового процесса на каждом соединении (до некоторых настроенных # активных процессов), но он будет жевать память, потому что вы разветвляете новый процесс для каждое соединение. Учитывая ваши требования, я бы посмотрел в другом месте.

Похоже, вы хотите, чтобы этот материал был размещен на общем веб-хостинге, и хотя я могу понять, почему, вы должны хотя бы признать, что на самом деле вы не размещаете веб-приложение, вы используете приложение для чата. (возможно, имеет веб-интерфейс).

0 голосов
/ 16 июля 2010

проверьте это руководство ..... это поможет вам создать веб-приложение для чата с использованием jquery http://net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a-simple-web-based-chat-application/

, вы можете получить их исходный код, попробовать себя и учиться ......

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