2015-10-28 4 views
4

Я использую laravel Event broadcasting, socket.io, node.js и redis для передачи уведомлений стороне клиента в режиме реального времени.Laravel Homestead, Socket.io Connection Refused

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

Содержание 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 для прослушивания на определенный канал, я получаю эту ошибку странно

GET 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> 

I`m Использование Windows 10 и Homestead виртуальной коробка.

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

+0

Привет, проверьте второй ответ, это правильный! Обязательно отметьте это, чтобы вы могли помочь другим, как это помогло мне – Deegriz

ответ

2

У меня была эта же проблема, и я решил открыть порт 3000 в VirtualBox. Для этого вы должны войти в настройки усадьбы внутри adn, затем Network-> Port Forwarding и установить 3000 на оба порта.

+0

Как это сделать? \ – Rubberduck1337106092

+0

Привет @JordyGroote, по крайней мере на Windows-машине, откройте VirtualBox, выберите свой домашний компьютер, нажмите настройки, затем выберите Сеть, нажмите «Дополнительно», выберите «Переадресация портов» и, наконец, добавьте новое правило tcp , с хост-портом с 3000 и гостевым портом с 3000 также. Скажите, если у вас возникли проблемы. – akatche

0

Пробовали ли вы

<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> 
+0

Да, я сделал .. все еще не повезло, я думаю, что это что-то с портом усадьбы и узла nodejs, потому что я запускал этот код вне дома, используя WAMP, и он действительно работал, поэтому ничего плохого в коде –

1

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

+0

Спасибо. Так много. – Deegriz