Plumber: рдПрдХ рд▓рдВрдмреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рд╕рдордпрдмрд╛рд╣реНрдп

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЕрдЧре░ 2016  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rstudio/plumber

рдирдорд╕реНрддреЗ !

рд╣рдо рдкреАрдбреАрдПрдл рдореЗрдВ рдПрдХ рд▓рдВрдмреА рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд▓рдЧрднрдЧ 3 рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕реЗ рдкреНрд▓рдореНрдмрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред
HTTP рдХрдиреЗрдХреНрд╢рди рд▓рдЧрднрдЧ 1 рдорд┐рдирдЯ 40 рд╕реЗрдХрдВрдб (100 рд╕реЗрдХрдВрдб) рдХреЗ рдХрд░реАрдм рд╣реИред

рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд▓рдВрдмрд░ рдмрдВрдж рдХрдиреЗрдХреНрд╢рди рдкрд░ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ:
ERROR: [on_request_read] connection reset by peer

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ #12 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡реИрд╕реЗ https://github.com/rstudio/httpuv/issues/49

рдкреНрд▓рдВрдмрд░ рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдкреНрд▓рдореНрдмрд░ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХреБрдЫ рднреЗрдЬрдХрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

Keep-Alive: timeout=300
Connection: Keep-Alive

рд▓реЗрдХрд┐рди рд╣рд░ рд╣рд╛рд▓ рдореЗрдВ рд╣рдо #12 . рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рд╕рд╛рджрд░,
рдПрдореНрдорд╛рдиреБрдПрд▓

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдмрд╕ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдореБрджреНрджрд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ: fork рдЖрдИрдПрдирдЬреА рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ parallel рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

parallel <- function() {
    # Long running calculation here
    print("Sleeping...")
    Sys.sleep(10)
    print("Finished.")
    return(Sys.time())
}

#* <strong i="8">@get</strong> /parallel
parallelTest <- function() {
    parallel::mcparallel(parallel())
    return(TRUE)
}

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ httpuv рдХреЗ рдЗрдВрдЯрд░реНрдирд▓ рд╕реЗ рдЗрддрдирд╛ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдореИрдВ рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдмреЛрд▓ рд╕рдХреВрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдХрджрдо рдкреАрдЫреЗ рд╣рдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рддреЗ рд╕рдордп рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рддреБрд░рдВрдд рдЬрд╡рд╛рдм рджреЗрдирд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдХрд╛рдо рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдореВрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдХреБрдЫ рдЖрдИрдбреА рдорд┐рд▓рддреА рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдм рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрд░ рд╕рд┐рдВрдЧрд▓ рдереНрд░реЗрдбреЗрдб рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдереЛрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдереЗ рддреЛ рдЖрдк рдЖрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ fork рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рдорд╛рдирд╛рдВрддрд░ рдпрд╛ рдорд▓реНрдЯреАрдХреЛрд░ рдкреИрдХреЗрдЬ рджреЗрдЦреЗрдВ) рдФрд░ рдлрд┐рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдПрдХ рдХрд╛рдВрдЯреЗ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛред (рдЬреИрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдЬреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХреА рд░рд┐рдкреЛрд░реНрдЯ рдЬрдирд░реЗрдЯ рд╣реБрдИ рд╣реИ рдпрд╛ рдирд╣реАрдВ)ред

рдирдорд╕реНрддреЗ,

рдпрд╣рд╛рдВ, рд╣рдордиреЗ рдЕрдкрдиреЗ рдЖрд░ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреА рд╣реИред рдЕрдЧрд░ рдореБрдЭреЗ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рддреЛ рдореИрдВ рд╡рд╛рдкрд╕ рдЖрдКрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реВрдВрдЧрд╛ред

рдмрд╕ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдореБрджреНрджрд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ: fork рдЖрдИрдПрдирдЬреА рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ parallel рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

parallel <- function() {
    # Long running calculation here
    print("Sleeping...")
    Sys.sleep(10)
    print("Finished.")
    return(Sys.time())
}

#* <strong i="8">@get</strong> /parallel
parallelTest <- function() {
    parallel::mcparallel(parallel())
    return(TRUE)
}
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

rensa picture rensa  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

colearendt picture colearendt  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

david-cortes picture david-cortes  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

meztez picture meztez  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dmenne picture dmenne  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ