Здравствуйте, я хочу подружить php и
socket.io, для этого использую библиотеку
elephant.io. Пишу следующее на php
public function actionIndex()
{
$elephant = new Client(new Version1X('http://localhost:1337'));
$elephant->initialize();
$elephant->emit('foo', ['bar' => 123]);
$elephant->close();
return $this->render('index');
}
Далее пишу серверную часть на node.js
var server = require('http').createServer(),
io = require('socket.io')(server),
port = 1337;
io.on('connection', function (socket){
console.log('SocketIO > Connected socket ' + socket.id);
socket.on('foo', function (data){
io.emit('foo', data);
});
});
server.listen(port);
Затем клиентскую часть на javascript
<script type="text/javascript" src="http://localhost:1337/socket.io/socket.io.js"></script>
var socket = io("http://localhost:1337");
socket.on("foo", function (data) {
$("#online").html(data);
});
При загрузке страницы изначальный контент в элементе online должен быть заменен на data. Но почему-то поведение следующее (по нажатию на F5), сначало заменяется на data, а затем на контент, который по дефолту. При каждом обновлении создается два сокета
SocketIO > Connected socket DNh-sNkK86UeEioVAACa
SocketIO > Connected socket fnAVoYuGoAKlHjf3AACb
Думаю, что проблема может быть в этом, но как решить задачу? Нужно передать данные из php в socket.io, а оттуда уже выбросить событие всем клиентам.
Нагуглил это
https://www.drupal.org/sandbox/greg_meszaros/1944670 и это
blog.ptapp.io/creating-real-time-applications-php
Делаю фактически также, но увы.