LAppS: рдПрдХ рд╕реАрдкреАрдпреВ рдкрд░ TLS рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдПрдХ рдорд┐рд▓рд┐рдпрди 1KB-WebSocket рд╕рдВрджреЗрд╢

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ: LAppS - Lua Application Server , рдпрд╣ рд▓рдЧрднрдЧ nginx рдпрд╛ apache рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ HTTP рдХреЗ рдмрдЬрд╛рдп WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдПред


рдЗрд╕рдореЗрдВ HTTP рдХреЗрд╡рд▓ рдЕрдкрдЧреНрд░реЗрдб рдЕрдиреБрд░реЛрдз рдХреЗ рд╕реНрддрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИред


LAppS рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрдЪреНрдЪ рднрд╛рд░ рдФрд░ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдорд╛рдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рддреЗрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЖрдЬ рдпрд╣ рдореЗрд░реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЪрд░рдо рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реИ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд▓рдЧрднрдЧ, рдЖрдк рдЖрдЧреЗ рднреА рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд▓рдВрдмрд╛ рдФрд░ рдХрдард┐рди рдХрд╛рдо рд╣реЛрдЧрд╛)ред


рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, WebSocket рд╕реНрдЯреИрдХ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ LAppS рдиреЗ uWebSockets рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ WebSocket рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рд░реБрдЪрд┐ рдХреГрдкрдпрд╛ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗред


рдпрд╣ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ LAppS рд▓реЗрдЦ рдХреЗ рдмрд╛рдж рд╕реЗ рдХреБрдЫ рдорд╣реАрдиреЗ рд░рд╣рд╛ рд╣реИ, рдЙрд╕ рд▓реЗрдЦ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рдЬрдЧреА ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЖрд▓реЗрдЦ рдЦрд╛рдмрд░реЛрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕ рджреМрд░рд╛рди LAppS рдиреЗ 0.7.0 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдард┐рди рд░рд╛рд╕реНрддрд╛ рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрдврд╝ рдЧрдпрд╛ рд╣реИ (рдЬреЛ рдкрд╣рд▓реЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред


рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ: рд╡реЗрдм рд▓реЛрдбрд┐рдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдореЙрдбреНрдпреВрд▓, - рд╕реАрд╡реАрдПрд╕ред


рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЕрдкрдиреЗ рдШрд░ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рд╕рдмрдХреБрдЫ рдирд┐рдЪреЛрдбрд╝рдиреЗ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЗ рд▓рд┐рдП рдПрд▓рдПрдкреАрдПрд╕ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред


рдкрд╣рд▓реЗ рд╡реЗрдмрд╕реИрдЯрдкреЗрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдИрдмреАрдПрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЬреАрдердм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдЬреЛ рди рдХреЗрд╡рд▓ рдзреАрдорд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдирд╛ рднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдмрд╕ рдмрд╛рд╣рд░ рдХрд┐рдП рдЧрдП рдереЗ: рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╢реБрд░реВ рд╣реБрдЖ, рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкрд░рд┐рдгрд╛рдо awk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдереЗ, рдФрд░ рд╕рд░рд▓ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдкреНрд░рджрд░реНрд╢рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рдереЗред рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдереЗ:


рд╕рд░реНрд╡рд░рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛рдЖрд░рдкреАрдПрд╕ рд╕рд░реНрд╡рд░рдкреНрд░рддрд┐ рдЧреНрд░рд╛рд╣рдХ рдЖрд░.рдкреА.рдПрд╕.рдкреЗрд▓реЛрдб (рдмрд╛рдЗрдЯреНрд╕)
LAppS 0.7.024084,997354,154128
uWebSockets (рдирд╡реАрдирддрдо)24074172.7309,053128
LAppS 0.7.024083627.4348,447512
uWebSockets (рдирд╡реАрдирддрдо)24071024.4295,935512
LAppS 0.7.024079270.1330,2921024
uWebSockets (рдирд╡реАрдирддрдо)24066499.8277,0831024
LAppS 0.7.024051,621215,0878192
uWebSockets (рдирд╡реАрдирддрдо)24045341.6188,9248192

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


рдЬрд╛рд╣рд┐рд░ рд╣реИ, 240 рдЧреНрд░рд╛рд╣рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдПрдХ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде, LAppS рд╕реНрд╡рдпрдВ (uWebSockets рдХреА рддрд░рд╣) рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реАрдкреАрдпреВ рдирд╣реАрдВ рдмрдЪреЗ рд╣реИрдВред


рдореИрдВрдиреЗ Lua рдХреЗ рддрд╣рдд WebSocket рдХреЗ рд▓рд┐рдП рдХрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрд╛, рдФрд░ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рдПрдХ рд╕рд░рд▓ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрд╛рджрдХ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ LAppS рдХреЛ рдареАрдХ рд╕реЗ рд▓реЛрдб рдХрд░ рд╕рдХрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдЕрдкрдиреА рдмрд╛рдЗрдХред


рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ WebSocket API рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ


рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг (рдмрд┐рдЯрдореЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рд▓реЗрдирджреЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛):


рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
bitmex={} bitmex.__index=bitmex bitmex.init=function() end - bitmex.run=function() --   BitMEX local websocket,errmsg=cws:new( "wss://www.bitmex.com/realtime", { ["onopen"]=function(handler) --   WebSocket    local result, errstr=cws:send(handler,[[{"op": "subscribe", "args": ["orderBookL2:XBTUSD"]}]],1); --    1 (OpCode 1 - ) if(not result) --     , -  then print("Error on websocket send at handler "..handler..": "..errstr); end end, ["onmessage"]=function(handler,message,opcode) print(message) --     BitMEX   . end, ["onerror"]=function(handler, message) --    print(message..". Socket FD: "..handler); end, ["onclose"]=function(handler) --     print("WebSocket "..handler.." is closed by peer."); end }); if(websocket == nil) --     then print(errmsg) else while not must_stop() do cws:eventLoop(); -- poll  end end end return bitmex; 

рдореИрдВрдиреЗ рддреБрд░рдВрдд рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреА, рдореЙрдбреНрдпреВрд▓ рдХреЗрд╡рд▓ рдЖрдЬ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рдЦрд░рд╛рдм рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред


рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ LAppS рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕реЗрд╡рд╛ рд▓рд┐рдЦреА рдФрд░ рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рдХрд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╣рд╛ ред


рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдпрд╣ рд╕реЗрд╡рд╛ рдЗрдХреЛ рд╕рд░реНрд╡рд░ WebSocket (рдЪрд╛рд╣реЗ рдХреЛрдИ рднреА рд╣реЛ) рд╕реЗ 100 рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ 1kb рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рднреЗрдЬрддрд╛ рд╣реИред


рдореЗрд░рд╛ рд╣реЛрдо рдХрдВрдкреНрдпреВрдЯрд░: Intel┬о Core (TM) i7-7700 CPU @ 3.60GHz, microcode 0x5e
рдореЗрдореЛрд░реА: DIMM DDR4 рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЕрдирдмрд░реНрдлрд░реНрдб (рдЕрдирд░рдЬрд┐рд╕реНрдЯрд░реНрдб) 2400 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ (0.4 рдПрдирдПрд╕), рдХрд┐рдВрдЧреНрд╕реНрдЯрди KHX2400C15 / 16G


рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЗрд╕ рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдкрд░ рдХрд┐рдП рдЧрдП рдереЗред


LAppS рдореЗрдВ рд╕реЗрд╡рд╛ рдЗрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди:


  "echo": { "auto_start": true, "instances": 2, "internal": false, "max_inbound_message_size": 16777216, "preload": null, "protocol": "raw", "request_target": "/echo" } 

рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рджреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдЗрдХреЛ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LAppS рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗрд╡рд╛ (рдХреНрд▓рд╛рдЗрдВрдЯ) рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди:


  "benchmark" : { "auto_start" : true, "instances": 4, "internal": true, "preload" : [ "cws", "time" ] } 

рдЖрд░рдВрдн рдореЗрдВ рд╕реЗрд╡рд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ 4 рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдП рдЧрдП рд╣реИрдВ


рдЯреАрдПрд▓рдПрд╕ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдкрд░ рдкрд░рд┐рдгрд╛рдо


рд╕рд░реНрд╡рд░рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛рдЖрд░рдкреАрдПрд╕ рд╕рд░реНрд╡рд░рдкреНрд░рддрд┐ рдЧреНрд░рд╛рд╣рдХ рдЖрд░.рдкреА.рдПрд╕.рдкреЗрд▓реЛрдб (рдмрд╛рдЗрдЯреНрд╕)
LAppS 0.7.0-рдЕрдкрд╕реНрдЯреНрд░реАрдо400257,828644.571024
nginx рдФрд░ lua-resty-websocket 4 рдХрд╛рд░реНрдпрдХрд░реНрддрд╛40033,78884.471024
websocketpp4009789.5224.471024

uWebSockets рдЕрдм рддрдХ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ - SSLS3 рдкрд░ TLS рд╣реИрдВрдбрд╢реЗрдХ рдХрд╕рдо рдЦрд╛рддрд╛ рд╣реИ (рдореЗрд░реЗ рдЧреНрд░рд╛рд╣рдХ TLSv1.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ libreSSL SSLv3 I рдЙрдкрдпреЛрдЧ рдореЗрдВ рдХрдЯ рдЬрд╛рддрд╛ рд╣реИ)ред


рдЯреАрдПрд▓рдПрд╕ рдХреЗ рдмрд┐рдирд╛ рдкрд░рд┐рдгрд╛рдо


рд╕рд░реНрд╡рд░рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛рдЖрд░рдкреАрдПрд╕ рд╕рд░реНрд╡рд░рдкреНрд░рддрд┐ рдЧреНрд░рд╛рд╣рдХ рдЖрд░.рдкреА.рдПрд╕.рдкреЗрд▓реЛрдб (рдмрд╛рдЗрдЯреНрд╕)
LAppS 0.7.0-рдЕрдкрд╕реНрдЯреНрд░реАрдо400439,7001099.251024
uWebSockets-рдирджреА рдХреЗ рдКрдкрд░400247,549618.871024

"рдЖрдзрд╛ рдорд┐рд▓рд┐рдпрди" рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг 257828 рдореЗрдВ рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдБ рджреЛ рдмрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рд╕рдВрджреЗрд╢ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛)ред


uWebsockets, рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЕрдХрд▓реНрдкрдиреАрдп рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ 1 рдХреЛрд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ uWebSockets рдХрд╛ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдЯреАрдПрд▓рдПрд╕ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рд╕реНрдЯреИрдХ рдореЗрдВ рдбреЗрдЯрд╛-рд░реЗрд╕ рд╣реЛрддреА рд╣реИред


рдпрджрд┐ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ uWebSockets 2 рдХреЛрд░ (рдЬреИрд╕реЗ 2 LAppS рдЗрдХреЛ рд╕реЗрд╡рд╛рдУрдВ) рдкрд░ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ 495098 RPS (рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЛрдЧреБрдирд╛) рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрдХреЛ рд╕рд░реНрд╡рд░ ( uWebSockets ) рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдЗрд╕реЗ рд╡рд╛рдкрд╕ рднреЗрдЬрддрд╛ рд╣реИред LAppS рд╕реЗрд╡рд╛ рдХреЗ рдЕрдиреБрд░реВрдк Lua рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред


LAppS рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ


  • PAM рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЙрдбреНрдпреВрд▓ pam_auth
  • рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдореЙрдбреНрдпреВрд▓: mqr - рдПрдХ рд╣реА LAppS рд╕рд░реНрд╡рд░ рдХреЗ рднреАрддрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП (рдорд▓реНрдЯреА-рд╕рд░реНрд╡рд░ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: RabbitMQ, mosquitto, рдЖрджрд┐)
  • рдПрд╕реАрдПрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди

рдпрд╣ рд╕рдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдХреА рдкреЗрдЬ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЦреИрд░, рдПрдХ рд╕реНрдиреИрдХ рдХреЗ рд▓рд┐рдП, рдкрд╛рд░рдЦреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдПрд▓рдПрдкреНрдкреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред


рдмрд┐рдирд╛ рдЯреАрдПрд▓рдПрд╕ рдХреЗ


рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
   iptables. 4.98% lapps [ip_tables] [k] ipt_do_table     3.80% lapps [kernel.vmlinux] [.] syscall_return_via_sysret       Lua  3.52% lapps libluajit-5.1.so.2.0.5 [.] lj_str_new    WebSocket  1.96% lapps lapps [.] WSStreamProcessing::WSStreamServerParser::parse     1.88% lapps [kernel.vmlinux] [k] copy_user_enhanced_fast_string 1.81% lapps [kernel.vmlinux] [k] __fget 1.61% lapps [kernel.vmlinux] [k] tcp_ack 1.49% lapps [kernel.vmlinux] [k] _raw_spin_lock_irqsave 1.48% lapps [kernel.vmlinux] [k] sys_epoll_ctl 1.45% lapps [xt_tcpudp] [k] tcp_mt  LAppS 1.35% lapps lapps [.] LAppS::IOWorker<false, true>::execute   1.28% lapps lapps [.] cws_eventloop ... 1.27% lapps [nf_conntrack] [k] __nf_conntrack_find_get.isra.11 1.14% lapps [kernel.vmlinux] [k] __inet_lookup_established 1.14% lapps libluajit-5.1.so.2.0.5 [.] lj_BC_TGETS      C++ 1.01% lapps lapps [.] LAppS::Application<false, true, (abstract::Application::Protocol)0>::execute ... 0.98% lapps [kernel.vmlinux] [k] ep_send_events_proc 0.98% lapps [kernel.vmlinux] [k] tcp_recvmsg 0.96% lapps libc-2.26.so [.] __memmove_avx_unaligned_erms 0.93% lapps libc-2.26.so [.] malloc 0.92% lapps [kernel.vmlinux] [k] tcp_transmit_skb 0.88% lapps [kernel.vmlinux] [k] sock_poll 0.85% lapps [nf_conntrack] [k] nf_conntrack_in 0.83% lapps [nf_conntrack] [k] tcp_packet 0.79% lapps [kernel.vmlinux] [k] do_syscall_64 0.78% lapps [kernel.vmlinux] [k] ___slab_alloc 0.78% lapps [kernel.vmlinux] [k] _raw_spin_lock_bh 0.73% lapps libc-2.26.so [.] _int_free 0.69% lapps [kernel.vmlinux] [k] __slab_free 0.66% lapps libcryptopp.so.5.6.5 [.] CryptoPP::Rijndael::Base::UncheckedSetKey 0.66% lapps [kernel.vmlinux] [k] tcp_write_xmit 0.65% lapps [kernel.vmlinux] [k] sock_def_readable 0.65% lapps [kernel.vmlinux] [k] tcp_sendmsg_locked 0.64% lapps libc-2.26.so [.] vfprintf     ( - bemchmark) 0.64% lapps lapps [.] LAppS::ClientWebSocket::send ... 0.64% lapps [kernel.vmlinux] [k] tcp_v4_rcv 0.63% lapps [kernel.vmlinux] [k] __alloc_skb 0.61% lapps lapps [.] std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release 0.61% lapps [kernel.vmlinux] [k] _raw_spin_lock 0.60% lapps libc-2.26.so [.] __memset_avx2_unaligned_erms 0.60% lapps [kernel.vmlinux] [k] kmem_cache_alloc_node 0.59% lapps libluajit-5.1.so.2.0.5 [.] lj_tab_get 0.59% lapps [kernel.vmlinux] [k] __local_bh_enable_ip 0.58% lapps [kernel.vmlinux] [k] __dev_queue_xmit 0.57% lapps [kernel.vmlinux] [k] nf_hook_slow 0.55% lapps [kernel.vmlinux] [k] ep_poll_callback 0.55% lapps [kernel.vmlinux] [k] skb_release_data 0.54% lapps [kernel.vmlinux] [k] native_queued_spin_lock_slowpath 0.54% lapps libc-2.26.so [.] cfree@GLIBC_2.2.5 0.53% lapps [kernel.vmlinux] [k] ip_finish_output2 0.49% lapps libluajit-5.1.so.2.0.5 [.] lj_BC_RET 0.49% lapps libc-2.26.so [.] __strlen_avx2 0.48% lapps [kernel.vmlinux] [k] _raw_spin_unlock_irqrestore 

рдЯреАрдПрд▓рдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╣рдореЗрдВ 10 рдЕрдВрддрд░ рдорд┐рд▓реЗрдВрдЧреЗ


рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
  3.73% lapps [kernel.vmlinux] [k] syscall_return_via_sysret 3.49% lapps libcrypto.so.43.0.1 [.] gcm_ghash_clmul 3.42% lapps libcrypto.so.43.0.1 [.] aesni_ctr32_encrypt_blocks 2.74% lapps [ip_tables] [k] ipt_do_table 2.17% lapps libluajit-5.1.so.2.0.5 [.] lj_str_new 1.41% lapps libpthread-2.26.so [.] __pthread_mutex_lock 1.34% lapps libssl.so.45.0.1 [.] tls1_enc 1.32% lapps [kernel.vmlinux] [k] __fget 1.16% lapps libcrypto.so.43.0.1 [.] getrn 1.06% lapps libc-2.26.so [.] __memmove_avx_unaligned_erms 1.06% lapps lapps [.] WSStreamProcessing::WSStreamServerParser::parse 1.05% lapps [kernel.vmlinux] [k] tcp_ack 1.02% lapps [kernel.vmlinux] [k] copy_user_enhanced_fast_string 1.02% lapps [nf_conntrack] [k] __nf_conntrack_find_get.isra.11 0.98% lapps lapps [.] cws_eventloop 0.98% lapps [kernel.vmlinux] [k] native_queued_spin_lock_slowpath 0.93% lapps libcrypto.so.43.0.1 [.] aead_aes_gcm_open 0.92% lapps lapps [.] LAppS::IOWorker<true, true>::execute 0.91% lapps [kernel.vmlinux] [k] tcp_recvmsg 0.89% lapps [kernel.vmlinux] [k] sys_epoll_ctl 0.88% lapps libcrypto.so.43.0.1 [.] aead_aes_gcm_seal 0.84% lapps [kernel.vmlinux] [k] do_syscall_64 0.82% lapps [kernel.vmlinux] [k] __inet_lookup_established 0.82% lapps [kernel.vmlinux] [k] tcp_transmit_skb 0.79% lapps libpthread-2.26.so [.] __pthread_mutex_unlock_usercnt 0.77% lapps [kernel.vmlinux] [k] _raw_spin_lock_irqsave 0.76% lapps [xt_tcpudp] [k] tcp_mt 0.71% lapps libcrypto.so.43.0.1 [.] aesni_encrypt 0.70% lapps [kernel.vmlinux] [k] _raw_spin_lock 0.67% lapps [kernel.vmlinux] [k] ep_send_events_proc 0.66% lapps libcrypto.so.43.0.1 [.] ERR_clear_error 0.63% lapps [kernel.vmlinux] [k] sock_def_readable 0.62% lapps lapps [.] LAppS::Application<true, true, (abstract::Application::Protocol)0>::execute 0.61% lapps libc-2.26.so [.] malloc 0.61% lapps [nf_conntrack] [k] nf_conntrack_in 0.58% lapps libssl.so.45.0.1 [.] ssl3_read_bytes 0.58% lapps libluajit-5.1.so.2.0.5 [.] lj_BC_TGETS 0.57% lapps [kernel.vmlinux] [k] tcp_write_xmit 0.56% lapps libssl.so.45.0.1 [.] do_ssl3_write 0.55% lapps [kernel.vmlinux] [k] __netif_receive_skb_core 0.54% lapps [kernel.vmlinux] [k] ___slab_alloc 0.54% lapps libc-2.26.so [.] __memset_avx2_unaligned_erms 0.51% lapps [kernel.vmlinux] [k] _raw_spin_lock_bh 0.51% lapps libcrypto.so.43.0.1 [.] gcm_gmult_clmul 0.51% lapps [kernel.vmlinux] [k] sock_poll 0.48% lapps [nf_conntrack] [k] tcp_packet 0.48% lapps libc-2.26.so [.] cfree@GLIBC_2.2.5 0.48% lapps libssl.so.45.0.1 [.] SSL_read 0.46% lapps [kernel.vmlinux] [k] copy_user_generic_unrolled 0.45% lapps [kernel.vmlinux] [k] tcp_sendmsg_locked 0.45% lapps lapps [.] LAppS::ClientWebSocket::send 0.44% lapps libc-2.26.so [.] _int_free 0.44% lapps libssl.so.45.0.1 [.] ssl3_read_internal 0.43% lapps [kernel.vmlinux] [k] futex_wake 0.42% lapps libluajit-5.1.so.2.0.5 [.] lj_tab_get 0.42% lapps libc-2.26.so [.] vfprintf 0.41% lapps [kernel.vmlinux] [k] tcp_v4_rcv 

Source: https://habr.com/ru/post/hi421421/


All Articles