Websockets - это крутая, передовая технология, встроенная в HTML5. По сути, вы можете открыть веб-сокет, чтобы обеспечить постоянную двустороннюю связь с веб-сервером. Клиент (пользовательский интерфейс) может самопроизвольно отправлять сообщения, и сервер также может отправлять сообщения.
Существующая технология (JavaScript) требует, чтобы все было запущено клиентом - сервер не может отправить клиенту ничего, что клиент не имеет запросов. Таким образом, скрипты должны постоянно обновлять и повторно запрашивать данные, которые могли не измениться. Веб-сокеты работают больше в режиме « push » и позволяют новым данным поступать по конвейеру в любое время.
К сожалению, большинство (в любом случае, все, что я могу найти) реализаций веб-сокетов требует определенного серверного приложения для работы. Люди будут запускать Apache на портах 80 и 443 (http и https) и запускать другую систему (обычно Node.js) на другом порту (например, 8000 или 8080) для обработки запросов веб-сокетов.
Это работает, очевидно, но у него есть некоторые недостатки.
У меня есть плагин, который я хочу создать, который очень выиграл бы от использования веб-сокетов в WordPress. Но если пользователю необходимо установить второй веб-сервер (обычно это невозможно для людей с общим хостингом), он не будет работать как плагин.
Итак, для любого из вас, у кого есть опыт, как бы вы сделали WordPress совместимым с веб-сокетами? Сделаете ли вы, чтобы WordPress обрабатывал сам обмен сообщениями, или включил в плагин другой скрипт мини-сервера? Если вы уже сделали это, как вы сделали это, не сломав сам WordPress?
Возможные ресурсы?
21.09.11 Обновление
Несмотря на все разговоры о том, что Apache (наиболее часто устанавливаемый сервер для запуска WP на общем хосте) не может действительно обрабатывать веб-сокеты изначально, я задаюсь вопросом об альтернативе. Несколько плагинов (например, JetPack) общаются с внешним сервисом или API для генерации контента.
Статистика запрашивает контент у Automattic. Akismet отправляет данные туда и обратно с внешнего сервера. После окончания срока подачи контента на момент публикации. Несколько инструментов SEO передают информацию через внешние системы.
Таким образом, в качестве альтернативы размещению кода веб-сокета в плагине WordPress, было бы целесообразно разместить службу веб-сокетов в центральном месте и вместо этого взаимодействовать с ней веб-интерфейсу WordPress?
источник
Ответы:
WebSockets использует протокол websockets: WS: /example.com/yourscript.js и открывает синхронное соединение - это означает, что соединение остается открытым и предназначено для браузера.
Серверы httpd, такие как apache2 (используется большинством провайдеров общего хостинга), используют протокол http:
http://example.com/yourscript.js
и открывают асинхронное соединение - это означает, что соединение между сервером и браузером не поддерживается. (Вы можете скромно продлить открытые соединения, установив определенные параметры конфигурации - но, вообще говоря, это асинхронно.)Как вы можете себе представить, поддержание открытых соединений между браузером и сервером выделяет больше серверных ресурсов для каждого соединения браузера и, следовательно, требует больше ресурсов сервера, чем разрыв соединений после каждого запроса. Поставщики виртуального хостинга явно не склонны поддерживать WS на виртуальном хостинге.
Хотя на некоторых общих хостах может быть установлен mod_python, что позволяет пользователям вашего плагина запускать pywebsocket , в собственной документации pywebsocket четко указано, что «pywebsocket предназначен для тестирования или экспериментальных целей».
Поэтому, хотя можно представить плагин, связывающий код Python для создания сервера pywebsocket, с учетом сервера apache, который его поддерживает, я не верю, что когда-либо будет разумно распространять плагин, который это сделал.
источник
В ответ на ваше обновление, на мой взгляд и на основании проведенного мною исследования, это был бы самый лучший вариант. Еще лучше было бы создать внешний плагин и создать службу внешних веб-сокетов, чтобы общаться с плагинами, и взимать плату за нее, чтобы вы могли монетизировать свою идею, если хотите. Вы даже можете предоставить исходный код для службы websocket и создать настройку в плагине, чтобы указать, где (какой домен / IP и порт) находится служба websocket.
источник
Для этого забудьте о «классическом» apache2 - apache2-mpm-prefork. Возможно, apache2-mpm-event справится с этим, но это экспериментально. Поскольку apache2 не управляется событиями, проблема, описанная @marfarma, существует. Для такого обслуживания вам понадобится управляемый событиями веб-сервер, например, чероки или nginx.
nginx может быть реальным преимуществом для WordPress (так как wordpress.com использует его и в качестве своего сервера) и может, например, передавать указанные запросы в службу node.js.
Несколько примеров в теме:
Я также сделал небольшое руководство по настройке nginx + php-fpm + wordpress .
источник
Другим потенциальным решением является использование стороннего поставщика веб-сокетов, я немного поэкспериментировал с Pusher (http://pusher.com/), есть API, к которому вы можете подключиться, который может хорошо работать для того, что вы Пытаешься сделать. Я размышлял, как я мог бы использовать это на своих собственных сайтах WordPress.
Возможным недостатком является то, что другие люди, пытающиеся использовать ваш плагин, также должны получить учетную запись Pusher, чтобы он работал. С ним гораздо проще работать, чем устанавливать собственный сервер веб-сокетов и поддерживать его, что на самом деле было бы преимуществом, когда речь заходит о других, пытающихся использовать ваш плагин.
источник
Короткий ответ: да, это выполнимо. Я мог бы взглянуть на что-то более распределенное, чем VPS, на котором вы работаете. Может быть, посмотрите на некоторые системы EC2 с балансировкой нагрузки или что-то подобное? (Я предполагаю, что у вас есть источник дохода, чтобы обеспечить такие удобства. Улыбка )
источник