Я искал действительно простой способ заставить 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 передавал обновления базы данных без сотен клиентов, запрашивающих базу данных.
Хотелось бы, чтобы я нашел это раньше - надеюсь, это поможет!?