Использование PHP с Socket.io - PullRequest
114 голосов
/ 19 июня 2011

Можно ли использовать Sockets.io на стороне клиента и взаимодействовать с приложением на основе PHP на сервере?Поддерживает ли PHP даже такой способ написания кода с «долгоживущим соединением»?

Весь пример кода, который я нахожу для socket.io, кажется, для node.js на стороне сервера, так что тут никакой помощи.

Ответы [ 13 ]

2 голосов
/ 29 октября 2013

Я еще не пробовал, но вы должны сделать это с ReactPHP и этим компонентом сокета . Выглядит так же, как Node, но в PHP.

1 голос
/ 16 апреля 2018

Я искал действительно простой способ заставить PHP отправлять клиентам сообщение socket.io.

Для этого не требуется никаких дополнительных библиотек PHP - он просто использует сокеты.

Вместо того, чтобы пытаться подключиться к интерфейсу websocket, как это делают многие другие решения, просто подключитесь к серверу node.js и используйте .on('data') для получения сообщения.

Затем socket.io может переслать его наклиенты.

Обнаружение соединения с вашего PHP-сервера в Node.js, например:

//You might have something like this - just included to show object setup
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);

server.on("connection", function(s) {
    //If connection is from our server (localhost)
    if(s.remoteAddress == "::ffff:127.0.0.1") {
        s.on('data', function(buf) {
            var js = JSON.parse(buf);
            io.emit(js.msg,js.data); //Send the msg to socket.io clients
        });
    }
});

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

Обратите внимание, что 8080 - это порт моего сервера Node.js - вы можете изменить его.

function sio_message($message, $data) {
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    $result = socket_connect($socket, '127.0.0.1', 8080);
    if(!$result) {
        die('cannot connect '.socket_strerror(socket_last_error()).PHP_EOL);
    }
    $bytes = socket_write($socket, json_encode(Array("msg" => $message, "data" => $data)));
    socket_close($socket);
}

Вы можете использовать его следующим образом:

sio_message("chat message","Hello from PHP!");

Вы также можете отправлять массивы, которые конвертируются в json и передаются клиентам.

sio_message("DataUpdate",Array("Data1" => "something", "Data2" => "something else"));

Это полезный способ «доверять»"что ваши клиенты получают законные сообщения с сервера.

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

Хотелось бы, чтобы я нашел это раньше - надеюсь, это поможет!?

0 голосов
/ 10 апреля 2014

Поищите в этой библиотеке php http://phptrends.com/category/70. Или используйте native от php http://www.php.net/manual/en/book.sockets.php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...