问题概述:服务端接收不到前端(客户端)发到服务端的请求
主要问题:服务端接收不到前端发到服务端的请求,同样前端也接收不到服务端发来的数据。
当有客户端进行连接的时候,服务器端控制台可以打印出客户端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