Можно ли использовать Sockets.io на стороне клиента и общаться с приложением на PHP на сервере? Поддерживает ли PHP даже такой способ «долгоживущей связи» для написания кода?
Весь пример кода, который я нахожу для socket.io, похоже, для node.js на стороне сервера, поэтому никакой помощи нет.
Может быть немного поздно, чтобы ответить на этот вопрос, но вот что я нашел.
Я не хочу обсуждать тот факт, что узлы делают это лучше, чем php или нет, это не главное.
Решение: я не нашел никакой реализации socket.io для PHP.
Но есть несколько способов внедрения WebSockets . Существует этот плагин jQuery, позволяющий использовать веб-узлы, грациозно унизительно для необоснованных браузеров. На стороне PHP есть этот класс, который, как представляется, наиболее широко используется для серверов PHP WS.
Если вы хотите использовать socket.io вместе с php, это может быть ваш ответ!
веб-сайт проекта:
elephant.io
они также находятся на github:
https://github.com/wisembly/elephant.io
Elephant.io предоставляет клиент socket.io, полностью написанный на PHP, который должен использоваться повсюду в вашем проекте.
Это легкая и простая в использовании библиотека, целью которой является приведение некоторых функций реального времени в приложение PHP через socket.io и websockets для действий, которые невозможно выполнить в полном javascript.
пример с веб-сайта проекта (связь с сервером websocket через php)
php-сервер
use ElephantIO\Client as Elephant; $elephant = new Elephant('http://localhost:8000', 'socket.io', 1, false, true, true); $elephant->init(); $elephant->send( ElephantIOClient::TYPE_EVENT, null, null, json_encode(array('name' => 'foo', 'args' => 'bar')) ); $elephant->close(); echo 'tryin to send `bar` to the event `foo`';
сервер сокета io
var io = require('socket.io').listen(8000); io.sockets.on('connection', function (socket) { console.log('user connected!'); socket.on('foo', function (data) { console.log('here we are in action event and data is: ' + data); }); });
UPDATE: август 2014. В текущем сайте socket.io v1.0 есть пример PHP: – https://github.com/rase-/socket.io-php-emitter
Если вы действительно хотите использовать PHP в качестве backend для socket.io, вот что я нашел. Две альтернативы серверной версии socket.io php.
https://github.com/walkor/phpsocket.io
https://github.com/RickySu/phpsocket.io
Exmaple коды для первого репозитория, подобного этому.
use PHPSocketIO\SocketIO; // listen port 2021 for socket.io client $io = new SocketIO(2021); $io->on('connection', function($socket)use($io){ $socket->on('chat message', function($msg)use($io){ $io->emit('chat message', $msg); }); });
Эмм, зачем ты хочешь? Оставьте PHP на бэкэнд и NodeJS / Sockets, чтобы сделать свою неблокирующую вещь.
Вот что вам нужно начать: http://groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc
Лично у меня есть экспресс-работа с конечной точкой, которая явно предназначена для взаимодействия с PHP.
Например, если я отправил пользователю электронное письмо, я хочу, чтобы socket.io отображал пользователю уведомление в режиме реального времени.
Хотите, чтобы взаимодействие от socket.io к php, ну, вы можете просто сделать что-то вроде этого:
var http = require('http'), host = WWW_HOST, clen = 'userid=' + userid, site = http.createClient(80, host), request = site.request("POST", "/modules/nodeim/includes/signonuser.inc.php", {'host':host,'Content-Length':clen.length,'Content-Type':'application/x-www-form-urlencoded'}); request.write('userid=' + userid); request.end();
Серьезно, PHP отлично подходит для работы на стороне сервера, и пусть это будет с соединениями, в которых сейчас нет места в этом домене. Зачем делать длинный опрос, когда у вас есть веб-сайты или флеш-память.
Для упомянутого вами «долгоживущего соединения» вы можете использовать Ratchet для PHP. Это библиотека, построенная на основе функций Stream Socket, поддерживаемых PHP с PHP 5.
Для клиентской стороны вам нужно использовать WebSocket, поддерживаемый HTML5, вместо Socket.io (поскольку вы знаете, socket.io работает только с node.js).
Если вы все еще хотите использовать Socket.io, вы можете попробовать таким образом: – найти и получить socket.io.js для использования клиентом – работать с Ratchet, чтобы имитировать способ подключения socket.io на сервере
Надеюсь это поможет!
Если вы действительно хотите использовать PHP в качестве своего бэкенда для WebSockets, эти ссылки могут помочь вам:
Я еще не пробовал, но вы должны сделать это с помощью ReactPHP и этого компонента сокета . Выглядит так же, как Node, но в PHP.
Как насчет этого ? PHPSocketio ?? Это альтернатива стороне сервера socket.io php. Цикл событий основан на расширении события pecl. Хотя до сих пор я этого не пробовал.
Посмотрите в этой библиотеке для php http://phptrends.com/category/70 . Или используйте native из php http://www.php.net/manual/en/book.sockets.php .