Усадьба Laravel, соединение Socket.io отказано

Я использую широковещательную рассылку событий laravel, socket.io, node.js и redis для передачи уведомлений клиентской стороне в режиме реального времени.

Код довольно прост: когда я делаю запрос на получение '/' на сервере, будет запущено событие, и некоторые данные будут транслироваться во все браузеры (на стороне клиента), которые прослушивают это событие на канале (test-Channel) .

Содержимое Routes.php:

Route::get('/', 'uses' => function () {

    Event::fire( new App\Events\UserHasRegistered('DummyData') );

    return view('test');
}]);

Класс события UserHasRegistered:

class UserHasRegistered extends Event implements ShouldBroadcast{
    use SerializesModels;

    public $name;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($name){
        $this->name =  $name;
    }

    /**
     * Get the channels the event should be broadcast on.
     *
     * @return array
     */
    public function broadcastOn(){
        return ['test-channel'];
    }

}

Содержимое файла узла сервера:

/*General Configurations :
- Setting up the node Server 
- Server side Socket.io 
- node js Redis Client 
- instance of ioredis 
*/
var server  =  require('http').Server();
var io      =  require('socket.io')(server);
var Redis   =  require('ioredis');
var redis   =  new Redis();

/*listen to a channel , and when a Message Arrives we send it to All Listening clients via socket.io*/
redis.subscribe('test-channel');
redis.on('message' , function(channel , message){
    message = JSON.parse(message);
    // The Client Side Channel naming conversion => channelName:EventPublishedToServer => testChannel:UserHasRegistered
    io.emit(channel + ':' + message.event , message.data );
});

/*Booting Up the Server : port 3000 */
server.listen(3000 , function(){
    console.log('The Server Is Running');
});

Все работает нормально, и данные передаются на сервер узла через redis, но на стороне клиента, где я использую socket.io для прослушивания определенного канала, я получаю эту странную ошибку

ПОЛУЧИТЬ http://192.168.10.10:3000/socket.io/?EIO=3&transport=polling&t=1446018378941-633 net :: ERR_CONNECTION_REFUSED

На стороне клиента:

<script type="text/javascript" src="/js/socket.io.js"></script>
    <script>
        /*Homestead IP Address , Port:3000 Node Server Port*/
        var socket = io('http://192.168.10.10:3000');

        /*When Data is sent to client side*/
        socket.on('test-channel:App\\Events\\UserHasRegistered' , function(data){
            console.log(data);
            //$('ul').append('<li><h5>'+ data.name +'</h5></li>');
        });
    </script>

Я использую виртуальную коробку Windows 10 и Homestead.

любая помощь ?


person Abd El-Rahman Rafaat    schedule 28.10.2015    source источник
comment
Эй, оп, проверьте второй ответ, это правильный! Обязательно отметьте это, чтобы вы могли помочь другим, как это помогло мне   -  person Deegriz    schedule 10.12.2015


Ответы (3)


У меня была такая же проблема, и я решил ее, открыв порт 3000 в VirtualBox. Для этого вы должны войти в настройки усадьбы внутри и затем «Сеть-> Переадресация портов» и поставить 3000 на оба порта.

person akatche    schedule 22.12.2015
comment
Как мне это сделать?\ - person Rubberduck1337106092; 10.07.2017
comment
Привет, @JordyGroote, по крайней мере, на машине с Windows откройте VirtualBox, выберите свой домашний компьютер, нажмите настройки, затем Сеть, нажмите Дополнительно, выберите Перенаправление портов и, наконец, добавьте новое правило tcp с хост-портом с 3000 и гостевым портом с 3000 тоже. Скажите, были ли у вас проблемы. - person akatche; 11.07.2017

вы пробовали использовать ssh с помощью "vagrant ssh" на своей виртуальной машине и запускать оттуда файл-сервер? У A была такая же проблема, когда я запускал файл сервера из windows- или git-command

person Thommis    schedule 12.11.2015

Ты пробовал

<script type="text/javascript" src="/js/socket.io.js"></script>
<script>
    /*Homestead IP Address , Port:3000 Node Server Port*/
    var socket = io.connect('http://192.168.10.10:3000');

    /*When Data is sent to client side*/
    socket.on('test-channel:App\\Events\\UserHasRegistered' , function(data){
        console.log(data);
        //$('ul').append('<li><h5>'+ data.name +'</h5></li>');
    });
</script>
person guicontat    schedule 03.11.2015
comment
Да, я сделал ... все еще не повезло, я думаю, что это что-то с портами сервера homestead и nodejs, потому что я запускал этот код вне дома с помощью WAMP, и он работал, так что с кодом все в порядке - person Abd El-Rahman Rafaat; 03.11.2015