Skip to content
This repository was archived by the owner on Feb 7, 2024. It is now read-only.

Connection id {id} message {"event":"pusher:connection_established","data":"{\"socket_id\":\"{id}\",\"activity_timeout\":30}"} Error #992

Closed
iamafasha opened this issue May 31, 2022 Discussed in #991 · 3 comments

Comments

@iamafasha
Copy link

Discussed in #991

Originally posted by iamafasha May 30, 2022
Hi, I set up a Laravel WebSocket server, and it works fine, but sometimes I this error especially when I have many connections to the WebSocket server at almost the same time (for example if I refresh the dashboard several times and try to connect to the WebSocket) the issue seems to be happening only in production.

Connection id 479386461.347846647 sending message {"event":"pusher:connection_established","data":"
{\"socket_id\":\"479386461.347846647\",\"activity_timeout\":40}"}

here is what my Nginx config looks like

map $httP_upgrade $type{
	default "web";
	websocket "websocket";
}

server {
	root  ......./webscoket-server/public/;
	add_header X-XSS-Protection             "1; mode=block";
        add_header X-Content-Type-Options       "nosniff";
	index index.html index.htm index.nginx-debian.html index.php;
	charset utf-8;
        location ~* ^/storage/(.*)\.(jpg|jpeg|gif|bmp|png|ico)$ {
                access_log off;
        }
	server_name websocketserver.domain;
	client_max_body_size 200M;
	location / {
		 try_files /nonexistent @$type;
	}

	location @web {
		 try_files $uri $uri/ /index.php$is_args$args;
	} 
	location @websocket {
	    proxy_pass http://127.0.0.1:6001;
	    proxy_read_timeout     60;
            proxy_connect_timeout  60;
            proxy_redirect         off;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;        
            proxy_cache_bypass $http_upgrade;
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
	}

	location ~ /\.ht {
		deny all;
	}

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/websocketserver.domain/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/websocketserver.domain/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}


server{
    	server_name socketonly.domain;
	error_log /var/log/nginx/error_websocket_port.log;
        access_log /var/log/nginx/access_websocket_port.log;

    location / {
        proxy_pass http://127.0.0.1:6001;
 	proxy_read_timeout     60;
        proxy_connect_timeout  60;
        proxy_redirect         off;
    
    	proxy_http_version 1.1;
    	proxy_set_header Upgrade $http_upgrade;
    	proxy_set_header Connection 'upgrade';
    	proxy_set_header Host $host;
    	proxy_cache_bypass $http_upgrade;
    }


    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/socketonly.domain/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/socketonly.domainprivkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = websocketserver.domain) {
        return 301 https://$host$request_uri;
    } # managed by Certbot



	server_name websocketserver.domain;
    listen 80;
    return 404; # managed by Certbot


}


server{
    if ($host = socketonly.domain) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    server_name socketonly.domain;
    listen 80;
    return 404; # managed by Certbot
}

// And this my config/websockets.php

    /*
     * Set a custom dashboard configuration
     */
    'dashboard' => [
        'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001),
    ],

    /*
     * This package comes with multi tenancy out of the box. Here you can
     * configure the different apps that can use the webSockets server.
     *
     * Optionally you specify capacity so you can limit the maximum
     * concurrent connections for a specific app.
     *
     * Optionally you can disable client events so clients cannot send
     * messages to each other via the webSockets.
     */
    'apps' => [
        [
            'id' => env('PUSHER_APP_ID'),
            'name' => env('APP_NAME'),
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'path' => env('PUSHER_APP_PATH'),
            'capacity' => null,
            'host' => env('PUSHER_APP_HOST', null),
            'enable_client_messages' => false,
            'enable_statistics' => true,
        ],
    ],

    /*
     * This class is responsible for finding the apps. The default provider
     * will use the apps defined in this config file.
     *
     * You can create a custom provider by implementing the
     * `AppProvider` interface.
     */
    'app_provider' => BeyondCode\LaravelWebSockets\Apps\ConfigAppProvider::class,

    /*
     * This array contains the hosts of which you want to allow incoming requests.
     * Leave this empty if you want to accept requests from all hosts.
     */
    'allowed_origins' => [
        //
    ],

    /*
     * The maximum request size in kilobytes that is allowed for an incoming WebSocket request.
     */
    'max_request_size_in_kb' => 250,

    /*
     * This path will be used to register the necessary routes for the package.
     */
    'path' => 'laravel-websockets',

    /*
     * Dashboard Routes Middleware
     *
     * These middleware will be assigned to every dashboard route, giving you
     * the chance to add your own middleware to this list or change any of
     * the existing middleware. Or, you can simply stick with this list.
     */
    'middleware' => [
        'web',
        Authorize::class,
    ],

    'statistics' => [
        /*
         * This model will be used to store the statistics of the WebSocketsServer.
         * The only requirement is that the model should extend
         * `WebSocketsStatisticsEntry` provided by this package.
         */
        'model' => \BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry::class,

        /**
         * The Statistics Logger will, by default, handle the incoming statistics, store them
         * and then release them into the database on each interval defined below.
         */
        'logger' => BeyondCode\LaravelWebSockets\Statistics\Logger\HttpStatisticsLogger::class,

        /*
         * Here you can specify the interval in seconds at which statistics should be logged.
         */
        'interval_in_seconds' => 60,

        /*
         * When the clean-command is executed, all recorded statistics older than
         * the number of days specified here will be deleted.
         */
        'delete_statistics_older_than_days' => 60,

        /*
         * Use an DNS resolver to make the requests to the statistics logger
         * default is to resolve everything to 127.0.0.1.
         */
        'perform_dns_lookup' => '1.1.1.1',
    ],

    /*
     * Define the optional SSL context for your WebSocket connections.
     * You can see all available options at: http://php.net/manual/en/context.ssl.php
     */
    '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' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null),

        /*
         * Path to local private key file on filesystem in case of separate files for
         * certificate (local_cert) and private key.
         */
        'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null),

        /*
         * Passphrase for your local_cert file.
         */
        'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null),
    ],

    /*
     * Channel Manager
     * This class handles how channel persistence is handled.
     * By default, persistence is stored in an array by the running webserver.
     * The only requirement is that the class should implement
     * `ChannelManager` interface provided by this package.
     */
    'channel_manager' => \BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManagers\ArrayChannelManager::class,
];

@iamafasha
Copy link
Author

Anyone to help me out?

@PaolaRuby
Copy link

Duplicate of #991
Hard to read if you don't use markdown correctly

@iamafasha
Copy link
Author

It was a discussion which I tried to turn into an issue. But basically what's happening is If I make like 5 connections almost simultaneously. The WebSocket server stops responding.

@mpociot mpociot closed this as completed Feb 7, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants