'Flutter Socket io Error on WebSocketException: Connection to was not upgraded to websocket
I use this package and it work properly on test websites but in app I got this Error
WebSocketException: Connection to 'https://socket.excopro.com:0/socket.io/?EIO=3&transport=websocket#' was not upgraded to websocket
and this is my Code
SocketService() {
var socket = io(
'https://socket.excopro.com:443/', <String, dynamic>{
'transports': ['websocket'],
'autoConnect': true,
});
socket.on('connect', (_) {
print('connect');
socket.emit('msg', 'test');
});
socket.on("connecting", (data) => print('connecting'));
socket.on('connect_error', (data) {
print(data);
socket.emit('msg', 'test');
});
}
Solution 1:[1]
I have met the same issue.
For my case, I use Nginx as proxy. I solve the issue by added some proxy header to my Nginx configuration.
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
You can refer to this link.
Solution 2:[2]
I ran into this error in my Flutter/Dart app which is being serviced by NGinx + NChan. It turned out that the wss:...
url that I was creating in Dart was malformed - easily done if you are doing string interpolation in Dart, PHP and JS all within the space of a few minutes given that each language has its own way of interpreting interpolated variables in braces. The result was that location = ~ /path/(regex)$
setting in my Nginx/NChan conf was not recognizing the URL as one that required upgrading to wss
. Nginx then proceeded to try and find the resource at https://example.com/malformed/path
without upgrading it to wss
which then threw up this error in Dart.
Lesson - when this happens check that the URL you are trying to reach is well formed so it ends up being recognized as one requring an upgrade to wss
server side.
Solution 3:[3]
You have make sure to enable websocket in Virtual Host.
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteRule /(.*) ws://127.0.0.1:3055/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://127.0.0.1:3055/$1 [P,L]
Here is the complete Virtual Host if anyone needs,
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://127.0.0.1:3055/
ProxyPassReverse / https://127.0.0.1:3055/
ProxyPass /api http://127.0.0.1:3055/api
ProxyPassReverse /api https://127.0.0.1:3055/api
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteRule /(.*) ws://127.0.0.1:3055/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://127.0.0.1:3055/$1 [P,L]
RewriteCond %{SERVER_NAME} =domain.com [OR]
RewriteCond %{SERVER_NAME} =www.domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Solution 4:[4]
Received this error when there was a mismatch on the client and server versions of socket_io
. Try finding the matching version to the version the server is using.
Solution 5:[5]
I had for the same error, this is what my environment:
- VPS with docker
- Azuracast as container
- Nginx proxy manager as container
- a public domain that point to the Azuracast via hots in nginx proxy manager.
- a flutter/dart mobile app that stream the radio flux, and I wanted to get "Now playing audio" updates via Websocket.
I had the same error when trying to connect via https schema with/without port.
I finally found that in nginx proxy manager I have to activate the Websocket option in the host I created. Then changed my url to wss://...
instead of https://...
In flutter I used this package for websocket => web_socket_channel: ^2.2.0
and this is the line of code to init the websocket:
var websocket = IOWebSocketChannel.connect(Uri.parse('wss://xxx.com/api/live/nowplaying/my_station_shortcode'))
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Sophanith Chhoun |
Solution 2 | DroidOS |
Solution 3 | Hiran D.A Walawage |
Solution 4 | rapaterno |
Solution 5 | Stephen Ostermiller |