WebSocket: рдЬреЗрдЯреА рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рднрд╛рдЧ 1

рд╢реБрдн рджреЛрдкрд╣рд░, рдЕрднрд┐рднрд╛рд╡рдХ!

рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдорд╣рд╛рди рджрд┐рд╡рд╕ рдкрд░ рд╕рднреА рдХреЛ рдФрд░ рд╕рднреА рдХреЛ рдмрдзрд╛рдИ! рдореИрдВ рдЖрдкрдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб, рднрд░реЛрд╕реЗрдордВрдж рд╕реЙрдХреЗрдЯ рдФрд░ рд╕рдмрд╕реЗ рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ!

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

рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддреАрди рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:

рдореИрдВ рддреБрд░рдВрдд рдкрд╣рд▓рд╛ рд╕рдорд╛рдзрд╛рди "рдЭрд╛рдбреВ" рдХрд░рддрд╛ рд╣реВрдВ (рдореИрдВ рдХрд╛рд░рдгреЛрдВ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрд╛рддрд╛, рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореБрдЭреЗ рд╕рдордЭреЗрдВрдЧреЗ)ред

рджреВрд╕рд░рд╛ рд╕рдорд╛рдзрд╛рди рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ:

рддреАрд╕рд░рд╛ рд╕рдорд╛рдзрд╛рди рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рдбреЙрдХреНрдЯрд░ рдиреЗ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдерд╛ред

рддреЛ, WebSocketред

WebSocket рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмреАрдЪ, рдХреЗрд╡рд▓ рдпрд╣ рддрдереНрдп рдХрд┐ рдЕрдм рддрдХ рдХреЗрд╡рд▓ рд╡реЗрдмрдХрд┐рдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реА рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ (рд╡реЗ Google Chrome рдФрд░ Apple Safari рд╣реИрдВ) рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред

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

рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдл рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд╡реЗрдм рдкреЙрдХреЗрдЯреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рд░рд▓ рд╣реИ, рд╣рдордиреЗ рдЗрд╕ рдкрд░ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИред рд╣рдо рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред

var socket = new WebSocket("ws://myserver.com:8081/"); socket.onopen = function () { console.log(" "); }; socket.onclose = function () { console.log (" "); }; socket.onmessage = function (event) { console.log ("   :", event.data); }; 


рдЖрдк рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬреЗрдВ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ:
socket.send(messageString);

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рджрд┐рдЦрддрд╛ рд╣реИред рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЖрдк рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдореЗрд░реЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рдереЗ:

рдЗрдирдореЗрдВ рд╕реЗ, JWebSocket рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ WebSocket рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдврд╛рдВрдЪрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд╕рд░реНрд╡рд░ рднреА рд╣реИред JWebSocket рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдФрд░ рдЕрдм рд╣рдо J2EE: рдЬреЗрдЯреНрдЯреА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ? рдЖрдЗрдП рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдЖрд░реЗрдЦ рдкрд░ред

, рдЧреНрд▓рд╛рд╕рдлрд┐рд╢ рдФрд░ рдЬреЗрдЯреНрдЯреА рдХреЗ рд╣реЗрдбрд░рд╛рдЗрдб

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреЛрд░реНрдЯ 8080 рдкрд░ рдЧреНрд▓рд╛рд╕рдлрд╝рд┐рд╢ рд╕рд░реНрд╡рд▓реЗрдЯ рдХрдВрдЯреЗрдирд░ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЧреНрд▓рд╛рд╕рдлрд╝рд┐рд╢ [1] рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ, рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдПрдХ рдЪреИрдЯ рдкреЗрдЬ [2] рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рд╡реЗрдмрд╕рд░реНрдХреЗрдЯ [3] рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреЛрд░реНрдЯ 8081 рд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред рдлрд┐рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдПрдХ рдкреВрд░реНрдг рджреНрд╡реИрдз рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рд╣реЛрддрд╛ рд╣реИ [4]ред

рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдЬреЗрдЯреНрдЯреА рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 8.0.1.v20110908 рд╣реИред рдбрд╛рдЙрдирд▓реЛрдб, рдЕрдирдкреИрдХ (рдореИрдВ рдорд╛рд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ), рд╡рд┐рддрд░рдг рд╕реЗ рд╣рдо 6 рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:

рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдУрд░ рд▓реМрдЯрддреЗ рд╣реБрдП, рдЗрд╕реЗ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ (рдореИрдВ HTML рдХреЛрдб рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдХреЗ рдкреЛрд╕реНрдЯ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛)ред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╡реЗрдм рдкреЗрдЬ рдкрд░ chat.html рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВред рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╡рд┐рд╡рд░рдгрдХ (web.xml) рдореЗрдВ, "рдЦреЛрдЬ-рдлрд╛рдЗрд▓" рдХреЗ рд░реВрдк рдореЗрдВ chat.html рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред

рдЕрдм рдереЛрдбрд╝рд╛ рдЬреЗрдЯреНрдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

Jetty рдПрдВрдмреЗрдбреЗрдб рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╣реИред org.eclipse.jetty.server.Serverред рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛ рдпрд╛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреЛрд░реНрдЯ рдирдВрдмрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

Server jetty = new Server(8081);

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЬреЗрдЯреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреЗрдЯреНрдЯреА рдХреНрд░рдорд╢рдГ рдкреНрд░рд╛рд░рдВрдн () рдФрд░ рд╕реНрдЯреЙрдк () рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдФрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рд╣реИрдВрдбрд▓рд░ рд╣рдореЗрдВ рдЕрдкрдирд╛ рд▓рд┐рдЦрдиреЗ, рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд▓рд┐рдП WebSocket рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рдореЗрдВ рдЗрд╕реЗ org.eclipse.jetty.websocket.WebSocketHandler рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

public class ChatWebSocketHandler extends WebSocketHandler {
тАж
}

WebSocketHandler рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╕рд╛рд░ doWebSocketConnect () рд╡рд┐рдзрд┐ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬреЗрдЯреА рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╡реЗрдмрд╕рдХреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рд╣рдореЗрдВ рдЕрдкрдиреЗ WebSocket рдХреНрд▓рд╛рд╕ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╣рдо рдЗрд╕реЗ org.eclipse.jetty.websocket.WebSocket.OnTextMessage рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВрдЧреЗ- рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡реЗрдмрд╕рд░реНрдХреЗрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЯреЗрдХреНрд╕реНрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред Org.eclipse.jetty.websocket.WebSocket.OnTextMessage рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рддреАрди рд╡рд┐рдзрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

рдпрд╣ рд╕рд░рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдЪрд▓реЛ ChatWebSocketHandler рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

 import java.io.IOException; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; import org.eclipse.jetty.websocket.WebSocket; import org.eclipse.jetty.websocket.WebSocketHandler; public class ChatWebSocketHandler extends WebSocketHandler { /** *    */ private final Set<ChatWebSocket> webSockets = new CopyOnWriteArraySet<ChatWebSocket>(); /** *       * @param request * @param protocol  (   ws  wss) * @return */ @Override public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) { //      //         // throw new Exception(); //   ,       //      return new ChatWebSocket(); } private class ChatWebSocket implements WebSocket.OnTextMessage { /** *   */ private Connection connection; /** *   */ private String userName = null; /** *     */ private final Pattern authCmdPattern = Pattern.compile("^\\/auth ([\\S]+).*"); /** *       */ private final Pattern getUsersCmdPattern = Pattern.compile("^\\/getUsers.*"); /** *      */ private final Pattern helpCmdPattern = Pattern.compile("^\\/help.*"); /** *      * @param connection */ @Override public void onOpen(Connection connection) { //     ChatWebSocket::connection this.connection = connection; //      ChatWebSocketHandler::webSockets webSockets.add(this); } /** *      * @param data */ @Override public void onMessage(String data) { //       data = data.replaceAll("<", "<").replaceAll(">", ">"); //     if (authCmdPattern.matcher(data).matches()) { Matcher matcher = authCmdPattern.matcher(data); matcher.find(); //     userName = matcher.group(1); try { //      ChatWebSocketHandler::webSockets for (ChatWebSocket webSocket : webSockets) { //   ,     webSocket.connection.sendMessage("inf|" + (webSocket.equals(this) ? "  " : ("   <b>" + userName + "</b>"))); } } catch (IOException x) { //          connection.disconnect(); } //       } else if (getUsersCmdPattern.matcher(data).matches()) { String userList = ""; //      ChatWebSocketHandler::webSockets for (ChatWebSocket webSocket : webSockets) { userList += webSocket.userName + ", "; } userList = userList.substring(0, userList.length() - 2); try { //     connection.sendMessage("inf|  : " + userList); } catch (IOException x) { //          connection.disconnect(); } //      } else if (helpCmdPattern.matcher(data).matches()) { String helpMessage = "     " + "       Enter.<br />" + "   :<br />" + "<ul><li><b>/help</b> -    </li>" + "<li><b>/getUsers</b> -    </li>" + "<li><b>/auth <i></i></b> -  </li></ul>"; try { //   connection.sendMessage("inf|" + helpMessage); } catch (IOException x) { //          connection.disconnect(); } //       } else { try { //     if (userName == null) { connection.sendMessage("err|  <br />" + "  <b>/help</b>  "); return; } //      ChatWebSocketHandler::webSockets for (ChatWebSocket webSocket : webSockets) { //       in   //  ,  -  out webSocket.connection.sendMessage((webSocket.equals(this) ? "out|" : ("in|" + userName + "|")) + data); } } catch (IOException x) { //          connection.disconnect(); } } } /** *       * @param closeCode * @param message */ @Override public void onClose(int closeCode, String message) { //      ChatWebSocketHandler::webSockets webSockets.remove(this); } } } 


рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо ChatWebSocketHandler рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ:

ChatWebSocket рд╡рд░реНрдЧ рдореЗрдВ, рд╣рдо onMessage () рд╡рд┐рдзрд┐ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ, рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рднрд╛рдЧреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдХрд╛рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреНрдпрд╛ рд╣реИ?

рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕рднреА рдкрд╛рда рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреАрди рдЖрджреЗрд╢реЛрдВ рдХреЛ рдЙрдирд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдирд┐рдореНрди рдкреИрдЯрд░реНрди рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ:

рдмрд╛рдХреА рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рд╕рдм рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред

рдЕрдм рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрд╖рдг рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ - рдЬреЗрдЯреНрдЯреА рд╕рд░реНрд╡рд░ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ: рд╕рд░реНрд╡рд▓реЗрдЯ рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рдЬреЗрдЯреНрдЯреА рдЪрд▓рд╛рдПрдВ; рд╕рд░реНрд╡рд▓реЗрдЯ рдХрдВрдЯреЗрдирд░ рдХреЛ рд░реЛрдХрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЬреЗрдЯреНрдЯреА рдмрдВрдж рдХрд░реЗрдВред GlassFish рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдирд╛ ContextListener рд▓рд┐рдЦреЗрдВред рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВ? рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ javax.servlet.ServletContextListener рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВред рд╕реВрдЪреА рджреЗрдЦреЗрдВред

 import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.DefaultHandler; public class ChatServerServletContextListener implements ServletContextListener { /** *   Jetty */ private Server server = null; /** *       * @param event */ @Override public void contextInitialized(ServletContextEvent event) { try { //   Jetty  8081  this.server = new Server(8081); //  ChatWebSocketHandler   Jetty ChatWebSocketHandler chatWebSocketHandler = new ChatWebSocketHandler(); //     WebSocketHandlerContainer chatWebSocketHandler.setHandler(new DefaultHandler()); //     jetty server.setHandler(chatWebSocketHandler); //  Jetty server.start(); } catch (Throwable e) { e.printStackTrace(); } } /** *       * @param event */ @Override public void contextDestroyed(ServletContextEvent event) { //   jetty -  if (server != null) { try { //  Jetty server.stop(); } catch (Exception e) { e.printStackTrace(); } } } } 


Javax.servlet.ServletContextListener рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╕реНрд╡-рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рдирд╛рдо рдХреЗ рд╕рд╛рде рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ: ReferenceInitialized (), ReferenceDestroyed ()ред

рдЕрдм рд╣рдореЗрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ ContextListener рдХреЛ рддреИрдирд╛рддреА рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ (web.xml) рдореЗрдВ рдкреНрд▓рдЧ рдХрд░ рджреЗрдВред рдореИрдВ рдЙрд╕рдХреА рд╕реВрдЪреА рджреВрдВрдЧрд╛:

 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>chat.html</welcome-file> </welcome-file-list> <listener> <listener-class>ChatServerServletContextListener</listener-class> </listener> </web-app> 


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

рдЫрд╡рд┐

рдЫрд╡рд┐

рдирд┐рд╖реНрдХрд░реНрд╖

рдкреВрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧреНрд▓рд╛рд╕рдлрд┐рд╢ 2.x, 3.x рдФрд░ рдЯреЙрдордХреИрдЯ 5.0 рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг Netbeans 7.0.1 рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрджрд░, рдЖрдк рдЪреАрдВрдЯреА рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдВрдЯреА-рддреИрдирд╛рдд.рдПрдХреНрд╕рдПрдордПрд▓ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВ рдорд╛рд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдмреЗрддрд╣рд╛рд╢рд╛ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВред

рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рдореИрдВ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдЬреЛ рд╡реЗрдмрд╕реНрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рдиред
рддреАрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЬреЗрдЯреНрдЯреА рд╕рд░реНрд╡рд░ рдкрд░ ddos тАЛтАЛрд╣рдорд▓реЛрдВ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛рдПред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╕рднреА рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдПрдХ рдЦреБрд╢ рдЫреБрдЯреНрдЯреА!

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


All Articles