Не найдено: /socket.io/ с помощью Django и React
Мне нужно установить сокетное соединение между фронтендом React
и бэкендом Django
.
socketio.js Сокет-клиент в React
import { io } from 'socket.io-client';
URL = 'http://127.0.0.1:8000/prices';
export const socket = io.connect(URL, {
cors: {
origin: 'http://127.0.0.1:8000',
credentials: true,
}
});
socketio.py Сокет-сервер в Django
from threading import Thread
import socketio
sio = socketio.AsyncServer(async_mode='asgi', logger=True, engineio_logger=True, cors_allowed_origins='*')
thread = Thread()
URL = '' //Empty for now
def getPrices():
print("Fetching Data")
while True:
data = requests.get(URL)
data = data.json()
data = data['stockList']
socketio.emit('stocks', {'data': data}, namespace='/prices')
socketio.sleep(60)
@sio.on('connect', namespace='/prices')
def connect():
global thread
print('Client connected')
if not thread.is_alive():
print("Starting Thread")
thread = socketio.start_background_task(getPrices)
@sio.on('disconnect', namespace='/prices')
def disconnect():
print('Client disconnected')
asgi.py server
import os
from django.core.asgi import get_asgi_application
import socketio
from main.socketio import sio
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_asgi_application()
SocketApplication = socketio.ASGIApp(sio, application)
Я использовал Uvicorn
в качестве ASGI веб-сервера и добавил Uvicorn
в INSTALLED_APPS
в settings.py
, а также добавил ASGI_APPLICATION = 'myproject.asgi.application'