CtrlCV工程师 2019-08-19 16:35 采纳率: 50%
浏览 1682

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

  • 写回答

1条回答

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试