【发布时间】:2021-04-02 22:46:50
【问题描述】:
我正在尝试让 Socket.IO 与我的 Django 服务器一起工作。这是我的设置:
前端js:
const socket = io.connect('127.0.0.1:8001');
socket.on('connect', () => {
console.log('socket id: %s\n', socket.id);
});
Django 服务器:
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
sio = socketio.Server(async_mode='eventlet', cors_allowed_origins='*', logger=True, engineio_logger=True)
@sio.event
def connect(sid, environ, auth):
print('connect ', sid, auth)
static_files = {
'/public': './static',
}
application = socketio.WSGIApp(sio, application, static_files=static_files)
eventlet.wsgi.server(eventlet.listen(('', 8001)), application)
依赖关系
Django==2.2.11
django-cors-headers==3.0.0
eventlet==0.30.0
gunicorn==19.7.1
python-socketio==4.6.1
...
当我运行 js 时,服务器在到达连接函数之前会返回 401 未授权错误。 前端:
GET http://127.0.0.1:8001/socket.io/?EIO=3&transport=polling&t=NYKlRjO 401 (UNAUTHORIZED)
Django 服务器日志:
(11053) accepted ('127.0.0.1', 34906)
127.0.0.1 - - [02/Apr/2021 15:39:31] "GET /socket.io/?EIO=3&transport=polling&t=NYKlTB8 HTTP/1.1" 401 253 0.002482
但奇怪的是,如果我将连接事件注释掉,其他事件都可以正常工作:
# @sio.event
# def connect(sid, environ, auth):
# print('connect ', sid, auth)
Django 服务器在同一个端口 8001 上运行。我认为连接事件或套接字上没有任何身份验证检查。任何人都知道为什么如果我设置了connect 事件并且套接字突然停止工作?
【问题讨论】:
标签: python-3.x django socket.io python-socketio