Haskell: вопросы обратного вызова сетевого канала

Я использую network-conduit и runTCPServer для питания моего застрявшего сервера.

В таком случае:

-- | Helper which represents a conduit chain for each client connection
serverApp :: Application SessionIO
serverApp appdata = do
    -- blah blah blah initializer code
    appSource appdata $$ decoder =$= protocol =$= encoder =$ appSink appdata

...

-- | Handles an input stream of 'Packet' objects and dispatches them
protocol :: Conduit Packet SessionIO Packet
protocol = undefined

Как часто выполняется протокол? Если бы я хотел, чтобы что-то своевременно выполнялось время от времени на клиентском сокете, было бы безопасно поместить его логику в протокол, или он вызывается только каждый раз, когда данные действительно достигают его?

Я был бы признателен, если бы вы объяснили, как работают «обратные вызовы» канала. :)

С уважением.


person kvanbere    schedule 23.05.2013    source источник


Ответы (1)


Обзор канала на сайте FP Complete объясняет управление потоком данных в канале. : в частности, каналы поднимаются по цепочке только тогда, когда необходимы данные. Поэтому, если вы полагаетесь на побочные эффекты, основанные на времени, полагаться на вызываемый канал — не лучший способ сделать это.

Однако это во многом зависит от вашего варианта использования и структуры вашей цепочки каналов, потому что вы можете поместить задержки в Conduit, чтобы ограничить его скорость или что-то подобное.

person coppro    schedule 23.05.2013
comment
Ссылка не работает. Кроме того, какова стандартная практика для создания временных эффектов, таких как отправка пакета ping? - person kvanbere; 23.05.2013