2

Hyper には、次の実装があります。HandlerSync

use std::sync::Mutex;
use std::sync::mpsc::{channel, Sender};
use hyper::server::{Handler, Server, Request, Response};

struct SenderHandler {
    sender: Mutex<Sender<&'static str>>
}

impl Handler for SenderHandler {
    fn handle(&self, req: Request, res: Response) {
        self.sender.lock().unwrap().send("start").unwrap();
    }
}

は異なるスレッドから呼び出すことができるため、Handlerを実装する必要があると述べています。SyncHandler

私には、これは不要なパフォーマンス ペナルティのように思えます。私が好むのはSenderHandler、スレッドごとに 1 つをセットアップし、それぞれが独立していることです。これにより、実装の要件がなくなりSyncます。

Hyper、Rust の型システムを誤解していますか、それとも不可能ですか?

4

2 に答える 2

3

わかりましたので、現時点ではこれは実際には Hyper では不可能に思えます。これはissue 248で議論されてSyncおり、開発者はClone:

これについては IRC で話し合いました。簡単な概要は、それが である場合 Clone、ユーザーは、リクエストごとに変更されると思われるハンドラーの状態を簡単に持つことができますが、代わりに、何度も複製され、期待したものを変更しないということです。代わりに、状態が同期されていることを確認するようにユーザーに強制することをお勧めします。

于 2016-10-15T15:06:05.593 に答える