Как подружить php и socket.io?

Здравствуйте, я хочу подружить 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
Делаю фактически также, но увы.
  • Вопрос задан
  • 11030 просмотров
Решения вопроса 1
@xfg Автор вопроса
Нашел причину. Она банальна. Изначально нужно отрендерить html-страницу, а только после этого выбрасывать событие через elephant.io в socket.io.

Исходя из этого, можно в actionIndex только рендерить страницу, а уже внтури страницы можно сделать ajax-запрос например при наступлении события jQuery(window).load() к нужному php экшену, который будет с помощью elephant.io выбрасывать событие в socket.io.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы