Laravel Homestead , Socket.io 连接被拒绝

Posted

技术标签:

【中文标题】Laravel Homestead , Socket.io 连接被拒绝【英文标题】:Laravel Homestead , Socket.io Connection Refused 【发布时间】:2016-01-27 21:46:17 【问题描述】:

我正在使用 laravel 事件广播、socket.io、node.js 和 redis 实时向客户端传递通知。

代码相当简单,当我在服务器上向“/”发出获取请求时,将触发一个事件,并且一些数据将被广播到在通道上监听此事件的所有浏览器(客户端)(测试-频道)。

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-633net::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 虚拟框。

任何帮助?

【问题讨论】:

嘿,请检查第二个答案,这是正确的!一定要标记它,这样你就可以帮助其他人,就像它帮助了我一样 【参考方案1】:

我遇到了同样的问题,我解决了在 VirtualBox 中打开端口 3000 的问题。为此,您应该进入 adn 中的 homestead 设置,然后进入 Network->Port Forwarding 并在两个端口上设置 3000。

【讨论】:

我该怎么做?\ 嗨@JordyGroote,至少在Windows机器上,打开VirtualBox,选择你的宅基地机器,点击设置,然后网络,点击高级,选择端口转发,最后添加一个新的tcp规则,主机端口为 3000,访客端口为 3000。如果您有任何问题,请告诉我。【参考方案2】:

您是否尝试通过“vagrant ssh”连接到您的虚拟机并从那里启动您的服务器文件?当我从 windows- 或 git-command 启动服务器文件时,A 遇到了同样的问题

【讨论】:

【参考方案3】:

你试过了吗

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

【讨论】:

是的,我做到了.. 仍然没有运气,我认为这与宅基地和 nodejs 服务器端口有关,因为我确实使用 WAMP 在宅基地外运行了这段代码,它确实有效,所以没什么问题代码

以上是关于Laravel Homestead , Socket.io 连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:SQLSTATE [28000] [1045] 用户 'homestead'@'localhost' 的访问被拒绝

如何获取 ENV 类型 Laravel + VueJS + Homestead

window环境的homestead,laravel项目的hosts配置

迁移到 Homestead 后在 PhpStorm 中为 Laravel 运行测试

Laravel Homestead 安装共享文件夹问题

Laravel Homestead安装教程