PHP сервер и веб-сокеты - PullRequest
       8

PHP сервер и веб-сокеты

4 голосов
/ 16 марта 2012

Я хочу начать использовать веб-сокеты для подключения к серверу сокетов PHP.Этот сервер должен через определенный промежуток времени проверять, изменилось ли что-либо в базе данных, и затем отправлять изменения обратно клиенту.Поэтому, когда клиент подключен, соединение должно оставаться открытым, пока клиент (в данном случае веб-браузер) находится на странице.

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

А как насчет интервала.Обычно в exe-приложении на C # .NET я просто создаю таймер.Как это можно сделать на PHP ??

Если это все возможно, могу ли я просто запустить свой код PHP на веб-сервере Apache?

1 Ответ

5 голосов
/ 16 марта 2012

Как правило, если вы хотите написать сервер сокетов на PHP, вы бы хотели запустить его через командную строку.Вещи, которые вы хотели бы принять во внимание:

Вам нужен доступ к сокетам, которых обычно нет на общем сервере, поэтому вам нужно будет получить себе VPS.

Вы хотите настроить файл на своем сервере, который будет автоматически запускать ваш PHP-скрипт при каждой перезагрузке сервера.Обычно это делается путем размещения сценария оболочки, который запускает сценарий PHP, в /etc/init.d, а затем помещает символическую ссылку на сценарий оболочки в /etc/rc5.d (при условии, что это уровень по умолчанию).* Вы также, скорее всего, не захотите / не захотите запустить Apache, если только вы не планируете использовать этот сервер в качестве файлового сервера.Если вы используете его исключительно для сокет-сервера, вам следует установить PHP-CLI.Это сэкономит вам память.

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

Существует решение для сокетов, которое не поддерживается во всех браузерах, называется socket.io.По сути, я считаю, что он пытается настроить веб-сокет браузера, если он поддерживается, но если он не поддерживается, он запускает подключение к сокету Flash.В любом случае для взаимодействия с ним используется один и тот же интерфейс.

Возможно, вы захотите использовать другой язык для создания вашего сокет-сервера.PHP на самом деле не создан для такого рода вещей.Лучшим языком для использования будет Javascript, особенно если речь идет о масштабируемости.Node.js - это библиотека, которая позволит вам довольно легко создать сервер сокетов и будет гораздо более масштабируемой.

...