Можно ли использовать Sockets.io на стороне клиента и общаться с приложением на основе PHP на сервере? Поддерживает ли PHP даже такой способ написания кода с «долгоживущим соединением»?
Весь пример кода, который я нахожу для socket.io, похоже, предназначен для node.js на стороне сервера, поэтому здесь нет никакой помощи.
Ответы:
Возможно, ответить на этот вопрос немного поздно, но вот что я нашел.
Я не хочу обсуждать тот факт, что узлы делают это лучше, чем php, или нет, это не главное.
Решение: я не нашел реализации socket.io для PHP.
Но есть несколько способов реализовать WebSockets . Есть этот плагин jQuery, позволяющий использовать Websockets, постепенно снижая производительность для не поддерживающих браузеров. Со стороны PHP есть этот класс, который, по-видимому, наиболее широко используется для серверов PHP WS.
источник
Если вы хотите использовать socket.io вместе с php, это может быть ваш ответ!
сайт проекта:
elephant.io
они также есть на github:
https://github.com/wisembly/elephant.io
Elephant.io предоставляет клиент socket.io, полностью написанный на PHP, который можно использовать везде в вашем проекте.
Это легкая и простая в использовании библиотека, которая направлена на привнесение некоторых функций в реальном времени в приложение PHP через socket.io и веб-сокеты для действий, которые не могут быть выполнены в полном javascript.
пример с сайта проекта (связь с сервером websocket через php)
php сервер
сокет io сервер
источник
ОБНОВЛЕНИЕ: август 2014 г. На текущем сайте socket.io v1.0 есть пример PHP: - https://github.com/rase-/socket.io-php-emitter
источник
Если вы действительно хотите использовать PHP в качестве серверной части для socket.io, вот что я нашел. Две альтернативы на стороне сервера socket.io php.
https://github.com/walkor/phpsocket.io
https://github.com/RickySu/phpsocket.io
Примеры таких кодов для первого репозитория.
источник
Для «долгоживущего соединения», о котором вы упомянули, вы можете использовать Ratchet для PHP. Это библиотека, построенная на основе функций Stream Socket, которые PHP поддерживает с PHP 5.
На стороне клиента вам необходимо использовать WebSocket, поддерживаемый HTML5, вместо Socket.io (как вы знаете, socket.io работает только с node.js).
Если вы все еще хотите использовать Socket.io, вы можете попробовать этот способ: - найти и получить socket.io.js для использования клиентом - работать с Ratchet, чтобы имитировать работу socket.io на сервере
Надеюсь это поможет!
источник
Эмм, зачем тебе это? Оставьте PHP на бэкэнде, а NodeJS / Sockets сделает его неблокирующим.
Вот что вам нужно для начала: http://groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc
Лично у меня есть экспресс-запуск с конечной точкой, которая специально прослушивает взаимодействие с PHP.
Например, если я отправил пользователю электронное письмо, я хочу, чтобы socket.io отображал пользователю уведомление в реальном времени.
Хотите взаимодействия с socket.io на php, ну, вы можете просто сделать что-то вроде этого:
Серьезно, PHP отлично подходит для работы на стороне сервера, и пусть это будет с подключениями, ему сейчас нет места в этом домене. Зачем делать длинный опрос, если у вас есть веб-сокеты или флеш-сокеты.
источник
Я знаю человека борьбы! Но недавно я довольно много работал с Workerman. Если вы еще не сталкивались с этим фреймворком php, вам лучше проверить это!
Что ж, Workerman - это асинхронная управляемая событиями среда PHP для простого создания быстрых масштабируемых сетевых приложений. (Я просто скопировал и вставил это с их веб-сайта, ха-ха-ха http://www.workerman.net/en/ )
Самый простой способ объяснить это: когда дело доходит до программирования веб-сокетов, все, что вам действительно нужно, - это иметь 2 файла на вашем сервере или локальном сервере (где бы вы ни работали).
server.php (исходный код, который будет отвечать на все запросы клиента)
client.php / client.html (исходный код, который будет выполнять запросы )
Итак, вы сначала исправляете код на своем server.php и запускаете сервер. Обычно, поскольку я использую окна, которые добавляют больше борьбы, я запускаю сервер с помощью этой команды -> php server.php start
Хорошо, если вы используете xampp. Вот один из способов сделать это. Идите туда, куда вы хотите поместить свои файлы. В нашем случае мы собираемся поместить файлы в
C: /xampp/htdocs/websocket/server.php
C: /xampp/htdocs/websocket/client.php или client.html
Предполагая, что у вас уже есть эти файлы на вашем локальном сервере. Откройте свой Git Bash, командную строку или терминал, или что бы вы ни использовали, и загрузите здесь библиотеки php.
https://github.com/walkor/Workerman
https://github.com/walkor/phpsocket.io
Обычно я загружаю его через композитор и просто автоматически загружаю эти файлы в свои скрипты php.
А также проверьте это. Это действительно важно ! Эта библиотека javascript нужна вам для того, чтобы client.php или client.html могли взаимодействовать с server.php при его запуске.
https://github.com/walkor/phpsocket.io/tree/master/examples/chat/public/socket.io-client
Я просто скопировал и вставил эту папку socket.io-client на том же уровне, что и мои server.php и мои client.php.
Вот исходный код server.php
А вот исходный код client.php или client.html
Еще раз откройте командную строку или git bash или терминал, в который вы поместили файл server.php. Итак, в нашем случае это C: / xampp / htdocs / websocket /, введите php server.php start и нажмите Enter.
Затем перейдите в браузер и введите http: //localhost/websocket/client.php, чтобы перейти на ваш сайт. Затем просто введите что-нибудь в это текстовое поле, и вы увидите базовый веб-узел php на ходу!
Просто нужно помнить. В программировании веб-сокетов ему просто нужны сервер и клиент. Сначала запустите код сервера и откройте код клиента. И вот оно! Надеюсь это поможет!
источник
Если вы действительно хотите использовать PHP в качестве серверной части для WebSockets, эти ссылки могут помочь вам:
https://github.com/lemmingzshadow/php-websocket
http://www.htmlgoodies.com/html5/other/create-a-bi-directional-connection-to-a-php-server-using-html5-websockets.html#fbid=QqpDVi8FqD9
источник
Как насчет этого ? PHPSocketio ?? Это альтернатива php-сервера socket.io. Цикл событий основан на расширении событий pecl. Хотя сам до сих пор не пробовал.
источник
Сейчас 2018 год, и на hoola есть способ реализовать WS и WAMPServer на php. Он называется Ratchet .
источник
Я еще не пробовал, но вы сможете сделать это с помощью ReactPHP и этого компонента сокета . Выглядит так же, как Node, но на PHP.
источник
Поищите в этой библиотеке php http://phptrends.com/category/70 . Или используйте родной php http://www.php.net/manual/en/book.sockets.php .
источник
Я искал действительно простой способ заставить PHP отправлять клиентам сообщение socket.io.
Это не требует дополнительных библиотек PHP - просто используются сокеты.
Вместо того, чтобы пытаться подключиться к интерфейсу websocket, как и многие другие решения, просто подключитесь к серверу node.js и используйте его
.on('data')
для получения сообщения.Затем
socket.io
можно отправить его клиентам.Определите соединение с вашим PHP-сервером в Node.js следующим образом:
Вот невероятно простой PHP-код - я обернул его функцией - вы можете придумать что-нибудь получше.
Обратите внимание, что
8080
это порт моего сервера Node.js - вы можете изменить.Вы можете использовать это так:
sio_message("chat message","Hello from PHP!");
Вы также можете отправлять массивы, которые преобразуются в json и передаются клиентам.
sio_message("DataUpdate",Array("Data1" => "something", "Data2" => "something else"));
Это полезный способ «поверить» в то, что ваши клиенты получают законные сообщения с сервера.
Вы также можете сделать так, чтобы PHP передавал обновления базы данных, чтобы сотни клиентов не запрашивали базу данных.
Хотел бы я найти это раньше - надеюсь, это поможет! 😉
источник
s.remoteAddress;
. Однако я не могу заставить его работать. Я получаю соединение в узле, он обнаруживает соединение, перестановка верна, ноs.on('data')
никогда не происходит, но ничего не происходит. Яs.on('msg')
тоже пробовал . Я использую ваш точный PHP-код. Я использую https для сервера узла, но это не имеет значения?8080
? Если нет, вам нужно изменить порт. Если да, проверьтеRemote Address
, что возвращается - убедитесь, что это адрес обратной связи / локальный адрес - он может отличаться от настроек вашего сервера. Для тестирования можно удалить строчкуif(s.remoteAddress == "::ffff:127.0.0.1")