Django Channels эквивалентный код для javax.websocket

Я новичок в Django Channels. Я пытаюсь повторить то, что сделано в этом Java-коде, используя Django Channels. Но я не могу понять, как отправить сообщение JSON на фронтенд Angular.

Во фронтенде есть таблица, которая будет обновляться через реализацию websocket. Но метод recieve, похоже, не повторяет то, что делал метод onMessage. Django Channels выполняет успешное рукопожатие. Но это все, что происходит.

Java Code

@ServerEndpoint("/socket/order")
@ApplicationScoped
public class OrderSocket {

    Set<Session> sessions = new HashSet<>();

    @OnOpen
    public void onOpen(Session session) {
        LOG.debug("onOpen " + session.getId());
        sessions.add(session);
    }

    @OnClose
    public void onClose(Session session) {
        LOG.debug("onClose " + session.getId());
        sessions.remove(session);
    }

    @OnError
    public void onError(Session session, Throwable throwable) {
        LOG.debug("onError " + session.getId() + " left on error: " + throwable);
        sessions.remove(session);
    }

    @OnMessage
    public void onMessage(String message) {
        LOG.debug("onMessage " + message);
        broadcast(message);
    }

    public void broadcast(OrderDto orderDto) {
        Jsonb jsonb = JsonbBuilder.create();
        String jsonString = jsonb.toJson(orderDto);
        broadcast(jsonString);
    }

    private void broadcast(String message) {
        sessions.forEach(s -> {
            LOG.debug("Message broadcasted: " + message);
            s.getAsyncRemote().sendObject(message, result -> {
                if (result.getException() != null) {
                    LOG.error("Unable to send message: " + result.getException());
                }
            });
        });
    }

}

Код Python

consumer.py

class OrderConsumer(WebsocketConsumer):
    log = logging.getLogger('main')

    def connect(self):
        self.log.debug("onOpen")
        self.accept()
    
    def receive(self, text_data=None, bytes_data=None):
        self.log.debug("onMessage " + text_data)

        self.send(text_data="Message = " + text_data)
    
    def disconnect(self, code):
        self.log.debug("onClose")
        return super().disconnect(code)

Типичный код

export class OrderWebSocketService {

    private API_URL = environment.API_URL;
    private SOCKET_URL = this.API_URL.replace(/http/gi, "ws");    
    myWebSocket: WebSocketSubject<Order> = webSocket(this.SOCKET_URL + 'socket/order/');

    constructor(private snackBar: MatSnackBar) { }

    public connect(): Observable<Order> {
        return this.myWebSocket.asObservable().pipe(
            map((obj) => obj),
            catchError((error) => this.errorHandler(error))
        );
    }

    public close(): void {
        this.myWebSocket.complete();
    }

    errorHandler(e: any): Observable<any> {
        this.showMessage('Something wrong happened with websocket!', true);
        return EMPTY;
    }

    showMessage(msg: string, isError: boolean = false): void {
        this.snackBar.open(msg, 'X', {
            duration: 3000,
            horizontalPosition: "right",
            verticalPosition: "top",
            panelClass: isError ? ['msg-error'] : ['msg-success']
        });
    }
    
}

Буду признателен за любые предложения.

Вернуться на верх