【问题标题】:Connecting Flask Socket.IO Server and Flutter连接 Flask Socket.IO 服务器和 Flutter
【发布时间】:2020-02-22 02:35:55
【问题描述】:

基本上,我有一个socket io烧瓶代码:

import cv2
import numpy as np

from flask import Flask, render_template
from flask_socketio import SocketIO, emit
from threading import Lock,Timer as tmr
from engineio.payload import Payload
import base64 
from PIL import Image
import io


app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

@socketio.on('connect')
def connect():
    print("a client connected")

@socketio.on('disconnect')
def disconnect():
    print('Client disconnected')

@app.route('/')
def hello():
    return render_template('index.html')

if __name__ == '__main__':
    socketio.run(app,port=port,host= '0.0.0.0')

当我尝试将其连接到 javascript 时,此代码运行良好

但是在颤振中我无法做到这一点

我有一个有状态的小部件,里面有一个按钮 当按下按钮时,我正在使用此功能连接到我的套接字

import 'package:socket_io_client/socket_io_client.dart' as IO;

IO.Socket socket;
  connectToSocket() {
  socket = IO.io("http://10.0.2.2:6400", <String, dynamic>{
    'transports': ['websocket', 'polling'],
  });
  socket.connect();
 }

无法连接,请帮帮我。

【问题讨论】:

  • 你是怎么在这里启动烧瓶服务器的?从主要还是其他地方?
  • 另外 - 你在哪里调用 connectToSocket() ?

标签: python flutter flask dart socket.io


【解决方案1】:

我知道这是一个较老的问题,但希望这个答案能对以后的人有所帮助。

这个问题可能是由于flutter中不支持polling造成的。

来自:https://github.com/rikulo/socket.io-client-dart#usage-flutter

在 Flutter 环境中。它仅适用于 dart:io websocket,不适用于 dart:html websocket,因此在这种情况下,您必须在创建套接字实例时添加 'transports': ['websocket']。

IO.Socket socket = IO.io('http://localhost:3000', <String, dynamic>{
    'transports': ['websocket'],
    'extraHeaders': {'foo': 'bar'} // optional
});

默认的 Flask 开发服务器不支持 websockets,所以你需要使用另一个服务器。值得庆幸的是,让 eventlet 与 Flask 一起工作很简单。您所要做的就是使用 pip 安装 eventlet 包。

pip install eventlet

一旦安装了 eventlet,socketio 将在运行服务器时检测并使用它。

您可以使用 chrome 仔细检查正在使用的传输方法。在 Windows 中打开您的 chrome 开发工具 Ctrl+Shift+I 并转到 Network tab。在每个网络请求上,您应该看到 transport=pollingtransport=websocket

【讨论】:

  • 谢谢先生。我相信它会帮助很多人,包括我:)
  • 谢谢。安装后 eventlet 工作正常
  • 嗨,我正在尝试在本地主机上运行烧瓶 socketio 应用程序,但我无法运行它。当我给 app.host='localhost' 时,它说在服务器 http://[: : 1]/5000 上运行,并且颤振也没有连接到烧瓶套接字。我从过去 4 天开始就在尝试。我找不到解决方法:/。请帮忙。我已经安装了 eventlet
猜你喜欢
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
相关资源
最近更新 更多