Как определить и удалить закрывающее соединение в WS-RS? - PullRequest
0 голосов
/ 09 марта 2020

У меня есть базовый c сервер с ws-rs, который содержит список соединений. Когда соединение закрывается, я хотел бы иметь возможность определить, какое это соединение, и удалить его из списка.

Я бы хотел добиться чего-то вроде этого:

extern crate ws; // 0.9.1

use ws::{listen, CloseCode, Handler, Sender};

struct Connection {
    ip: String,
}

struct MyHandler {
    out: Sender,
    connections: Vec<Connection>,
}

impl Handler for MyHandler {
    fn on_close(&mut self, code: CloseCode, reason: &str) {
        // here I'd like to identify the connection
        // but there doesn't seem to be any interface for it
    }
}

fn main() {
    listen("127.0.0.1:8001", |out| MyHandler {
        out,
        connections: Vec::new(),
    })
    .unwrap();
}

Я чувствую, что достаточно просто сохранить список соединений, и я упускаю что-то очевидное. Я не могу найти какие-либо ресурсы в Интернете об этом.

1 Ответ

0 голосов
/ 10 марта 2020

Я нашел ответ на r / rust .

Этот вопрос - случай, когда вы гуглили не тот вопрос. Я неправильно понял использование Handler . Я предположил, что был только один Handler (для каждого потока), но Handler предназначен для представления соединения. Ведение списка из них аналогично ведению списка соединений, каждое из которых идентифицируется экземпляром Отправитель , созданным для каждого соединения.

...