0

celluloid-zmq を使用しており、アプリケーションで複数のソケットに接続しています。アプリケーションはバックグラウンドでループをリッスンし続けますが、特定のソケットを閉じると、「セルロイド::タスク終了: タスクが終了しました」というエラーが表示されます

例外でループを終了していますが、

def puller_loop
    logger.info "polling PULL socket"
    loop {
            begin
                async.evaluate_response(pullsock.read_multipart,'PULL')
            rescue Exception => e
                break
            end
    }
end
4

1 に答える 1

1

ソケットのクローズ時にリスナー メソッドがクラッシュします。ハンドラー ループをキャッチして適切に終了する必要があります。

readソケットとwrite操作は常にrescueブロックで囲み、次に、言及した例外やその他のソケットエラーなどの例外breakから外します。loop


また、データが到着loopすると呼び出しがトリガーされるため、 ...によって呼び出されるメソッドとそれ自体に含まれている必要があります。可能な限りキャッチしないようにしてください。あなたのエラーはのサブクラスではないと漠然と確信していますasyncrescueasyncloopExceptionException

于 2016-04-22T06:34:18.800 に答える