Доступна ли встроенная поддержка PHP для веб-сокетов?

Ищем пример реализации веб-сокетов типа Hello World:

Вот ссылка на Socket Create с php.net, но это выглядит более низким уровнем, чем веб-сокеты. .

Я хочу использовать эти веб-сокеты, как показано здесь, на caniuse.com, который теперь реализован во всех новых основных браузерах.

Поиск в Google обнаружил этот сайт Nets.TutsPlus, на котором я можно использовать пример кода JavaScript ... но мне нужно знать, как реализовать серверную часть на PHP, а не на Java, Ruby или Node.js, как в примере.

Актуален ли PHP Socket Create? Поддерживает ли PHP изначально веб-сокеты? Я полагаю, что это поможет указать правильное направление реализации PHP.

На самом деле в руководстве есть неработающая ссылка на phpwebsockets ... это библиотека, которую следует использовать?

В Websockets.org есть тестовое приложение, но нет упоминания о PHP.


person Community    schedule 30.08.2012    source источник
comment
Это, вероятно, может помочь: Программирование сокетов PHP, сделано правильно   -  person ChocoDeveloper    schedule 30.08.2012
comment
Поиск в Google веб-сокетов PHP дает множество результатов, например: socketo.me, flynsarmy.com/2012/02/php-websocket-chat-application-2-0, code.google.com/p/phpwebsocket   -  person scrappedcola    schedule 30.08.2012
comment
Я не вижу четкого направления того, как подходить к веб-сокетам в PHP .... поддерживается ли он изначально или мне нужна другая библиотека ... был бы мой первый вопрос о том, как реализовать? ....   -  person    schedule 30.08.2012
comment
При поиске не путайте сокеты с веб-сокетами.   -  person Brad    schedule 30.08.2012
comment
Отличный вопрос. Вот о чем я хочу спросить.   -  person Gunah Gaar    schedule 08.04.2013
comment
Разница между сокетом и веб-сокетом?   -  person ashleedawg    schedule 29.11.2020


Ответы (2)


Нет встроенной поддержки с точки зрения наличия стандартного объекта PHP WebSocket, изначально доступного.

Вам понадобится библиотека.

Следующее, что нужно учитывать, - это то, как работает сервер WebSocket. Обычно PHP работает в Apache, Nginx (через FastCGI) или в Microsoft IIS (через Fast CGI). С Apache и IIS это может быть проблемой, поскольку на самом деле он не построен с учетом постоянных соединений, таких как WebSockets. Насчет Nginx не уверен. Вот почему большинство библиотек PHP WebSocket будут построены как отдельные библиотеки, которые будут запускаться как собственные процессы.

Видеть:

Примечание. IE10 теперь выпущен в Windows 8

См. Также: Система push-уведомлений Ajax

person leggetter    schedule 30.08.2012
comment
Поддерживают ли это хост-провайдеры? маленькие ... например, godaddy.com, wiredtree.com, я просто выбираю библиотеку, а затем помещаю ее в свою веб-папку ... дело в том, что я нахожусь в стеке LAMP ... - person ; 31.08.2012
comment
Общий ответ на это заключается в том, что хостинг-провайдеры не любят, когда вы создаете постоянные соединения - и определенно не потенциально 100 или 1000 постоянных подключений. Лично я не думаю, что использование собственного WebSocket на виртуальном хостинге будет вариантом в течение длительного времени. Он, конечно, не особенно хорошо интегрируется со стандартным стеком LAMP IMHO. На данный момент я считаю, что размещенная служба, такая как Pusher (на которую я работаю), является лучшим решением для разработчиков в размещение стека LAMP. - person leggetter; 31.08.2012
comment
Я обратился в службу технической поддержки Wired Tree, и они сказали, что все в порядке. - person ; 02.09.2012
comment
@leggetter, можете ли вы дать ссылку на постоянное соединение, которое ненавидит? моя пропускная способность резко упала, когда я перешел на 100% ajax. Он упал примерно с той же скоростью после перехода на 100% веб-сокет. Так что мне очень любопытно. Заранее спасибо! - person ; 02.11.2013
comment
@Gracchus постоянное соединение ненавидит? Если вы можете уточнить, я сделаю все возможное, чтобы помочь. - person leggetter; 04.11.2013
comment
@leggetter просто пытался сэкономить место. re: Общий ответ на это заключается в том, что хостинг-провайдеры не любят, когда вы создаете постоянные соединения - и определенно не потенциально 100 или 1000 постоянных подключений. единственное, что мне пришло в голову, это то, что предполагалось, что веб-сокеты будут использовать большую пропускную способность, но я использую гораздо меньше пропускной способности с веб-сокетами против ajax против обратной передачи. интересно, есть ли у вас подробности по этому комментарию. еще раз спасибо заранее! - person ; 04.11.2013
comment
@Gracchus проблема не в пропускной способности, а в количестве постоянных подключений. В общем, затраты на поддержание соединений действительно съедают использование ресурсов. Если вы примете это во внимание при использовании общего хостинга, то очевидно, что наличие одного приложения с большим количеством постоянных подключений может повлиять на другие приложения на общем хосте. Поставщики PaaS, такие как Heroku и OpenShift, только относительно недавно добавили поддержку WebSocket - Heroku все еще находится в стадии бета-тестирования. OpenShift написал о некоторых проблемах, с которыми они столкнулись openshift.com/blogs/paas-websockets - person leggetter; 04.11.2013
comment
@leggetter вы можете дать ссылку об использовании ресурсов постоянных соединений? Я не видел этого в предоставленной вами ссылке, но спасибо, что показали мне языки боли, такие как php, ruby ​​и т. д., которые должны пройти, чтобы начать работу с apache! еще раз большое спасибо заранее! - person ; 04.11.2013
comment
@Gracchus Боюсь, что нет ссылки на статью, которая отвечает на ваш вопрос напрямую. Вы можете собрать воедино кусочки головоломки, прочитав модули Apache MPM это хорошее начало (см., в частности, Prefork), модуль событий Apache MPM, старые ресурсы и более новые. Извините, они не отвечают прямо на вопрос. - person leggetter; 04.11.2013
comment
@Gracchus - То, что говорит Леггеттер, в значительной степени известно. Открытие сокетов для внешнего мира сопряжено с множеством проблем, особенно когда сервис часто разрабатывается начинающими кодировщиками. У вас есть проблемы с управлением процессами, проблемы с управлением подключением, проблемы с безопасностью (каждый открытый порт - это, по сути, дверь в систему) и т. Д. Кроме того, если служба не сломана, не пронизана проблемами безопасности и работает эффективно, по сути, это становится конкурирующей услугой для поставщика. Не многие бизнес-модели допускают такое. - person JSON; 17.01.2014
comment
Для каких версий PHP это верно? Это все еще верно для последних? - person YakovL; 12.09.2016
comment
Действительно хороший статья / руководство, демонстрирующее, как использовать веб-сокеты PHP с ghedipunk / PHP-WebSockets, Elephant.io, Rachet and Wrench. - person Rusty; 11.10.2017
comment
Я также сделал песчаник: github.com/eole-io/sandstone и использую его, когда нужен сервер websocket с остальным api и push-событиями - person Alcalyn; 30.01.2018

Да, PHP + Websocket можно сделать очень просто, без какой-либо сторонней библиотеки (например, часто упоминаемого Ratchet).

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

Вы можете найти более подробные инструкции по этому поводу здесь: Как создавать веб-сокеты сервер на PHP.

Он использует постоянно работающий PHP-сервер, который вы запускаете из командной строки с php websockets.php, с циклом событий (аналогично способу Node.JS). На 100% возможно использование собственных функций PHP, таких как socket_create и т. Д.

person Basj    schedule 30.01.2021
comment
Это именно то, что я хочу! СПАСИБО ДОРОГОЙ. Мне действительно интересно, как все работает в низкоуровневом программировании. - person Imali7 ARF; 18.04.2021