node.js-socketio与Python-socketio通信问题

问题概述:服务端接收不到前端(客户端)发到服务端的请求

主要问题:服务端接收不到前端发到服务端的请求,同样前端也接收不到服务端发来的数据。

当有客户端进行连接的时候,服务器端控制台可以打印出客户端GET请求的响应码(400)和客户端的身份信息(sid),当有客户端关闭的时候也可以打印出消息。

考虑过前后端的socket.io版本差异,但经过测试后已经基本排除

​ 测试方法是:前端使用node.js写的服务器,版本无论是1.x还是2.x都是可以正常工作的。

考虑过CORS跨域请求问题,但经过测试也可以大致排除

​ 测试方法是:首先前端的人确认在客户端上已经处理过这个问题,再者前端使用node.js写的服务器尝试删除掉关于跨域请求的任何设置依旧可以正常工作。

考虑过命名空间问题,但经过测试已经排除

尝试过使用Flask框架的扩展包Flask-socketio进行连接/数据收发

代码示例:

# -*- encoding: utf-8 -*-

from flask import Flask

def create_app():
    app = Flask(__name__)
    socketio.init_app(app)
    return app
app = create_app()

@socketio.on('test', namespace='/test')
def test(data):
    print('客户端插入的消息', data)
    emit('message', data, broadcast=True)


if __name__ == '__main__':

    app.debug = True
    socketio.run(app, host='0.0.0.0', port=8000, debug=True, log_output=True)

尝试过使用python-socketio包进行连接/数据收发

代码示例:

from flask import Flask

sio = socketio.Server(async_mode='threading', cors_allowed_origins='*', engineio_logger=True)
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.wsgi_app = socketio.WSGIApp(sio, app.wsgi_app)


@sio.event
def connect(sid, environ):
    print('客户端已连接', sid)

@sio.event
def disconnect(sid):
    print('连接断开 ', sid)

@sio.event
def login_request(data):
    # 数据收发
    print(data)
    sio.emit('login_response',[responseData])

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000, debug=True, threaded=True)

尝试过使用基于Django框架的Django-socketio,但是由于Django框架过于庞大功能太多不够灵活,以及路由问题,在尝试使用socketio的时候没能驾驭的了,完全连接不上。失败。

前端的状态码一直是400或101

开发系统环境尝试过:CentOS,Ubuntu,windows

https://blog.csdn.net/wangjiangrong/article/details/80738778