Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel beyondcode websockets do not connect

I'm using this Laravel websockets package to have my own websocket server.

As mentioned in package documentation, I have this configuration:

.env setting:

PUSHER_APP_ID=761772
PUSHER_APP_KEY=qwerty
PUSHER_APP_SECRET=secret
PUSHER_APP_CLUSTER=ap2

broadcasting.php:

    'pusher' => [
        'driver' => 'pusher',
        'key' => env('PUSHER_APP_KEY'),
        'secret' => env('PUSHER_APP_SECRET'),
        'app_id' => env('PUSHER_APP_ID'),
        'options' => [
            'cluster' => env('PUSHER_APP_CLUSTER'),
            'encrypted' => true,
            //'host' => '105.208.174.8', <--I did test this too
            'host' => '127.0.0.1',
            'port' => 6001,
            'scheme' => 'https'//<--Tested with http
        ],
    ],

websockets.php:

'apps' => [
    [
        'id' => env('PUSHER_APP_ID'),
        'name' => env('APP_NAME'),
        'key' => env('PUSHER_APP_KEY'),
        'secret' => env('PUSHER_APP_SECRET'),
        'enable_client_messages' => false,
        'enable_statistics' => true,
    ],
],

bootstrap.js:

/**
 * Echo exposes an expressive API for subscribing to channels and listening
 * for events that are broadcast by Laravel. Echo and event broadcasting
 * allows your team to easily build robust real-time web applications.
 */

import Echo from 'laravel-echo'

window.Pusher = require('pusher-js');

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'qwerty',
    wsHost: window.location.hostname,
    wsPort: 6001,
    disableStats: true,
    encrypted: true,
    enabledTransports: ['ws', 'wss'] //This was added from issue 86

});

This is issue number 86 in package repository

I'm using letsencrypt with my directadmin control panel and this is my SSL part of websockets.php configuration:

    'ssl' => [
    /*
     * Path to local certificate file on filesystem. It must be a PEM encoded file which
     * contains your certificate and private key. It can optionally contain the
     * certificate chain of issuers. The private key also may be contained
     * in a separate file specified by local_pk.
     */
    //'local_cert' => null,
    'local_cert' => '/home/myDomain/domains/myDomain/public_html/vendor/react/socket/examples/localhost.pem',
      //'local_cert' => '/usr/local/directadmin/data/users/myDomain/domains/myDomain.ir.cert',
    /*
     * Path to local private key file on filesystem in case of separate files for
     * certificate (local_cert) and private key.
     */
    //'local_pk' => null,
    'local_pk' => '/usr/local/directadmin/data/users/myDomain/domains/myDomain.ir.key',

    /*
     * Passphrase for your local_cert file.
     */
    'passphrase' => null,
    ],

But when I use php artisan websockets:serve, It seems there's something wrong about connection and the myDomain.com/laravel-websockets admin panel says:

Channel's current state is unavailable

and the console says:

Firefox can’t establish a connection to the server at wss://myDomain.ir:6001/app/qwerty?protocol=7&client=js&version=4.3.1&flash=false.

pusher.min.js:8:6335 The connection to wss://myDomain.ir:6001/app/qwerty?protocol=7&client=js&version=4.3.1&flash=false was interrupted while the page was loading.

Does anyone know what's my issue and how should I solve this?

like image 221
Kiyarash Avatar asked Apr 16 '19 01:04

Kiyarash


1 Answers

I had the same issue and the problem was the read access of the local_cert and local_pk.

You can use sudo php artisan websocket:serve to try if this is the issue.

If it's the case, add read access to the files or use a user with the access in /etc/supervisor/conf.d/websockets.conf

like image 82
mchev Avatar answered Sep 29 '22 15:09

mchev