Python flask_socketio已连接到客户端,但未接收消息

Python flask_socketio已连接到客户端,但未接收消息,python,flask,socket.io,flask-socketio,Python,Flask,Socket.io,Flask Socketio,我有一个Flask服务器应用程序/React客户端应用程序,我正在尝试将Flask_socketio集成到其中。我复制了flask_socketio文档中的标准介绍性示例,它与我的React前端配合得很好 然而,当我尝试在flask中复制结果时,使用完全相同的步骤,我无法发送或接收消息。当我运行flask应用程序时,我可以在输出中看到一个客户端已连接,在浏览器控制台中,我有一个console.log告诉我已连接到服务器,但emit(或send)似乎不像简介示例那样工作 我已经安装了eventle

我有一个Flask服务器应用程序/React客户端应用程序,我正在尝试将Flask_socketio集成到其中。我复制了flask_socketio文档中的标准介绍性示例,它与我的React前端配合得很好

然而,当我尝试在flask中复制结果时,使用完全相同的步骤,我无法发送或接收消息。当我运行flask应用程序时,我可以在输出中看到一个客户端已连接,在浏览器控制台中,我有一个console.log告诉我已连接到服务器,但emit(或send)似乎不像简介示例那样工作

我已经安装了eventlet,文档说flask_socketio应该自动识别它。下面是一些代码片段供参考

app/socket/_;init.py


从flask_socketio导入socketio
socketio=socketio(允许使用cors)http://localhost:3000')
app/socket/socket.py


从flask_cors进口交叉原产地
从flask_socketio导入发送、发出
从…起导入socketio
@交叉起源
@socketio.on('connect')
def句柄_连接():
打印('用户已连接')
emit('mymessage','Hi client,我是服务器')#我也在这里尝试过'send'
@交叉起源
@socketio.on('mymessage')
def句柄_消息(消息):
打印('来自客户端的消息:'+消息)
app/_u; init.py

从烧瓶导入烧瓶
从LASKU cors进口cors
从.socket导入socketio
def create_app():
app=烧瓶(名称)
#跨来源资源共享
CORS(应用程序)
#Socket.IO
socketio.init_应用程序(应用程序)
返回(socketio,应用程序)
app/app.py


从…起导入创建应用程序
socketio,app=create_app()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
运行(应用程序,host='localhost',端口=5000)
#app.run(“0.0.0.0”,端口=5000,线程=True,使用\u重载器=False)
反应组分

const socket = io('http://localhost:5000');

class Figures extends React.Component {

  setSocketListeners () {

    socket.on('connect', () => {
      console.log('connected to socket');
      socket.emit('mymessage', 'Hi server, I am client.');
    })

    socket.on('mymessage', function(data) {
      console.log('Message from server: ' + data)
    })
  }

  componentDidMount() {
    this.setSocketListeners()
  }

...
输出:

终点站

*使用stat重新启动
*调试器处于活动状态!
*调试器PIN:216-814-307
(4089)wsgi在上启动http://127.0.0.1:5000
127.0.0.1--[2019年8月14日02:40:35]“POST/socket.io/?EIO=3&transport=polling&t=MoEsrSZ&sid=a4f73c34553f478cabde2f919b48fe98 HTTP/1.1”200 219 0.002675
(4089)已接受('127.0.0.1',36512)
(4089)已接受('127.0.0.1',36514)
127.0.0.1--[2019年8月14日02:40:36]“GET/socket.io/?EIO=3&transport=polling&t=moesrssf&sid=a4f73c34553f478cabde2f919b48fe98 HTTP/1.1”200 235 1.612156
浏览者

connected to socket
编辑:

初步调试似乎表明“create_app()”存在一些问题。见@miguelgrinberg。但在如何解决这个问题上仍然没有进展


已启用
socketio.init\u app(app,async\u mode=“eventlet”,engineio\u logger=True)
并禁用flask中的调试,以确保未使用werkzeug

也有类似的问题

我认为在前端代码上打开套接字时,应该启用WebSocket的传输模式,例如:

    const socket = io('http://localhost:5000', {transports: [websocket]});
您还需要安装gevent和gevent websocket并导入socket.io-client,如:

    import io from 'socket.io-client/dist/socket.io'; 

我已经实现了一个工作示例:

与类似的问题相关

我认为在前端代码上打开套接字时,应该启用WebSocket的传输模式,例如:

    const socket = io('http://localhost:5000', {transports: [websocket]});
您还需要安装gevent和gevent websocket并导入socket.io-client,如:

    import io from 'socket.io-client/dist/socket.io'; 
我已经实现了一个工作示例: