Flutter websocket 连接问题 - 连接未升级到 websocket

问题描述

IO.socket socket = IO.io('https://*****.com/*****/');
socket.connect();
socket.io.options['extraHeaders'] = {
  'foo': 'bar','Authorization': 'Bearer $_token',};
socket.onConnect((_) {
  print('connect');
  socket.emit('msg','test');
});

socket.on('event',(data) => print(data));
socket.ondisconnect((_) => print('disconnect'));
socket.onConnectError((handler) => print(handler.toString()));
socket.onError((_) => print('onError'));
socket.on('fromServer',(_) => print(_));

Flutter: WebSocketException: Connection to 'https://**********.com:0/socket.io/?EIO=3&transport=websocket#' 没有升级到 websocket **

解决方法

我也有同样的问题

我有聊天服务(使用 SocketIO + Strapi),如果它在 localhost/private_IP 中就可以正常工作,我可以将我的模拟设备和手机连接到我的服务聊天

但是我必须用docker和nginx来部署它, 为此,我有我的 docker_compose.yaml

chat:
  image: strapi/strapi
  volumes:
    - ./chat:/srv/app
  ports:
    - '3000:3000'
  # build:
  #   ./backend/backend
  environment:
    DATABASE_CLIENT: chatDB
    DATABASE_HOST: chatDB
    DATABASE_NAME: databaseName
    DATABASE_PORT: 27017
    DATABASE_USERNAME: root
    DATABASE_PASSWORD: databasePass
  links:
    - chatDB

还有我的位置-nginx

location /chat/ {
    rewrite ^/chat/(.*)$ /$1 break;
    proxy_pass http://chat:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_pass_request_headers on;
}

聊天服务还可以,因为如果我向 /chat/users 提出请求,我会得到回复

PD:我对 Nginx 感到很糟糕