Страница не найдена на Django с использованием Websockets
Я впервые работаю с вебсокетами в Django, и у меня не очень хорошо получается, я получаю либо ошибку 404 not found, либо ошибку: unexpected server response: 200, я проверял некоторые учебники, а также читал документацию, и некоторые говорят, что нужно использовать TypeScript, но я не очень понимаю, почему
Цель
Моя цель состоит в том, чтобы иметь возможность сделать запрос к Electron, чтобы он мог взять принт-скрин экрана вашего пользователя и отправить его мне в виде строки, чтобы я мог манипулировать им в Django Python, эта часть уже функционирует, я протестировал ее с Simple WebSockets Client
, но теперь, когда я пытаюсь протестировать с другими пользователями и получить их скриншот, и для этого я использую ngrok
, чтобы держать сервер поднятым для других пользователей, чтобы получить доступ. Происходит так, что я захватываю свой электронный сервер, а не других пользователей, и теперь я пытаюсь изменить Routes, чтобы захватить их, но у меня ничего не получается, если кто-нибудь может помочь, очень прошу
index.js
const { desktopCapturer, screen, BrowserWindow, app } = require('electron');
const { spawn } = require('child_process');
const django = spawn('python', ['manage.py', 'runserver']);
const wss = new WebSocket.Server({ port: 8000 });
wss.on('connection', ws => {
ws.on('message', message => {
console.log('Mensagem recebida:', message.toString());
if (message.toString() === 'screenshot_requested') {
captureScreenshots(ws);
}
});
});
function createWindow() {
// Create the browser window
const mainWindow = new BrowserWindow({
title: 'SketchPixel Facial Recognition',
width: 1920,
height: 1680,
icon: 'templates/static/assets/sketchpixel_logo.jpg'
});
// Carregar a URL do aplicativo
const appUrl = 'https://35f8-2001-8a0-ff62-e300-d469-e0a-17a0-b9bd.ngrok-free.app/';
mainWindow.loadURL(appUrl);
// Definir a janela para ser fullscreen
}
django.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
}
);
django.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
}
);
django.on('close', (code) => {
console.log(`child process exited with code ${code}`);
}
);
Consumers.py
from channels.generic.websocket import AsyncWebsocketConsumer
import json
class ScreenshotConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
async def disconnect(self, close_code):
pass
async def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
await self.send(text_data=json.dumps({
'message': message
}))
## Routing.py ##
from django.urls import re_path
from . import consumers
websocket_urlpatterns = [
re_path(r'ws/main/', consumers.ScreenshotConsumer.as_asgi()),
]
views.py
def call_node_script(request): #Função para chamar o script Node.js
print("Solicitando captura de tela...")
ws = websocket.create_connection('wss://35f8-2001-8a0-ff62-e300-d469-e0a-17a0-b9bd.ngrok-free.app/ws/main/')
print("Conexão WebSocket estabelecida com sucesso.")
ws.send('screenshot_requested')
# Receber a resposta do servidor
result = ws.recv()
ws.close()
print("Resposta Recebida com sucesso.")
return result
asgi.py
import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from django.urls import re_path
from main import consumers
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'facial.settings')
websocket_urlpatterns = [
re_path(r'ws/screenshot/', consumers.ScreenshotConsumer.as_asgi()),
]
application = ProtocolTypeRouter({
"http": get_asgi_application(),
"websocket": AuthMiddlewareStack(
URLRouter(
websocket_urlpatterns
)
),
# Just HTTP for now. (We can add other protocols later.)
})
Терминал Джанго
Handshake status 200 OK -+-+-
Handshake status 404 Not Found -+-+-
Электрон
update Required