2016-12-03 5 views
2

Кажется (на основе wirehark), клиент cohttp закрывает свое соединение автоматически после получения ответа на запрос GET.
Есть ли способ сохранить это соединение в живых (чтобы сделать его постоянным)?
Если нет какой-либо другой библиотеки HTTP для создания постоянных соединений?Постоянное HTTP-соединение с использованием библиотеки cohttp (или другого)

ответ

2

Просмотрев код github, похоже, что такой вариант отсутствует.

let call ?(ctx=default_ctx) ?headers ?(body=`Empty) ?chunked meth uri = 
    ... 
    Net.connect_uri ~ctx uri >>= fun (conn, ic, oc) -> 
    let closefn() = Net.close ic oc in 
    ... 
    read_response ~closefn ic oc meth 

read_response Где находится:

let read_response ~closefn ic oc meth = 
    ... 
    match has_body with 
    | `Yes | `Unknown -> 
     let reader = Response.make_body_reader res ic in 
     let stream = Body.create_stream Response.read_body_chunk reader in 
     let closefn = closefn in 
     Lwt_stream.on_terminate stream closefn; 
     let gcfn st = closefn() in 
     Gc.finalise gcfn stream; 
     let body = Body.of_stream stream in 
     return (res, body) 

Если я читаю это правильно соединение закроется, как только GC очищает поток.