Cach├й DBMS, рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде TCP / IP рдкрд░ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди-рд╕реНрддрд░реАрдп
рдХрдорд╛рдВрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХреНрдпрд╛ рд▓рдЪреАрд▓реЗрдкрди, рдЧрддрд┐ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЛ рдЦреЛрдП рдмрд┐рдирд╛ "рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ" рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рдмреЗрд╢рдХ рд╡рд╣рд╛рдБ рд╣реИ: рдмрд╕ рдореМрдЬреВрджрд╛
рдЦреБрд▓реЗ ,
рдЙрдкрдпреЛрдЧ ,
рдмрдВрдж , рдЖрджрд┐ рдЖрдЬреНрдЮрд╛рдУрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рд╡рд╕реНрддреБ рдЖрд╡рд░рдг рд▓рд┐рдЦреЗрдВред OOP рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣
рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рд╣реИ ред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕реА рдХрдХреНрд╖рд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ - рдПрдХ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП - рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдХреИрдЪ рд╕рдВрд╕реНрдХрд░рдг 5.2 рдХреЗ рд╕рд╛рде рдЖрддреА рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН:
- % IO.ServerSocket - рд╕рд░реНрд╡рд░ рдкрдХреНрд╖ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;
- % IO.Socket - рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдкрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП;
рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рджреЛ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ рез
рд╕рд░реНрд╡рд░ рдХреЛрдб
#dim sock As %IO.ServerSocket = ##class ( %IO.ServerSocket ). %New ()
set sock. TranslationTable = "UTF8"
write #, " ..." , !
#; : pPort, pTimeout, pSC
do sock. Open (7001, 1, .sc)
if $$$ISOK (sc) {
do sock. Listen ()
do {
#; : pMaxReadLen, pTimeout
set s=sock. ReadAny (250, 5)
write s,!
#; : pData, pFlush
do sock. Write ( $$$FormatText ( " %1" , $$$quote (s)), $$$YES )
} while (s'= "bye!" )
do sock. Close ()
write " ..." , !
}
рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб
#dim sock As %IO.ServerSocket = ##class ( %IO.Socket ). %New ()
set sock. TranslationTable = "UTF8"
write #, " ..." , !
#; : pHost, pPort, pTimeout, pSC
do sock. Open ( "127.0.0.1" , "7001" ,1,.sc)
if $$$ISOK (sc) {
#; : pData, pFlush
do sock. Write ( " " , $$$YES )
#; : pMaxReadLen, pTimeout
write sock. ReadAny (250, 5),!
hang 2
do sock. Write ( "bye!" , $$$YES )
write sock. ReadAny (250, 5),!
do sock. Close ()
write " ..." , !
}
- рд╕рд░реНрд╡рд░ рдкрд░ рдкрд░рд┐рдгрд╛рдо:
... bye! ...
- рдЧреНрд░рд╛рд╣рдХ рдкрд░ рдкрд░рд┐рдгрд╛рдо:
... " " "bye!" ...
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд░рд╣рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдкрд╛рд░рджрд░реНрд╢реА рд╣реИред
рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдм " рдмрд╛рдп! " рд╕реНрдЯреЙрдк рд▓рд╛рдЗрди рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдЕрдкрдирд╛ рдХрд╛рдо рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ 2
рдХреЛрдб:
Class demo.socket Extends %RegisteredObject
{
ClassMethod Server2()
{
#; do ##class(demo.socket).Server2()
#dim sock As %IO.ServerSocket = ##class ( %IO.ServerSocket ). %New ()
write #, " ..." , !
do sock. Open (10081, 1, .sc)
if $$$ISOK (sc) {
do sock. Listen (-1, .sc)
do {
set s=sock. ReadAny ( $$$MaxLocalLength ,, .sc)
write s,!
do sock. Write (s, $$$YES , .sc)
} while (s'= "bye!" )
do sock. Close ()
write " ..." , !
}
}
ClassMethod Client2( end As %Boolean = { $$$NO })
{
#; do ##class(demo.socket).Client2(1)
#dim sock As %IO.ServerSocket = ##class ( %IO.Socket ). %New ()
write #, " ..." , !
do sock. Open ( "127.0.0.1" , "10081" ,1,.sc)
if $$$ISOK (sc) {
set time= $zhorolog
for i=1:1:10 {
do sock. Write ( "1234567890" , $$$YES , .sc)
set s=sock. ReadAny ( $$$MaxLocalLength ,, .sc)
write s,!
}
write "= " , $zhorolog -time, " ." ,!
do :end sock. Write ( "bye!" , $$$YES , .sc)
do sock. Close ()
write " ..." , !
} else {
write $system .Status . GetErrorText (sc, "ru" ),!
}
}
}
WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдКрдкрд░ рджрд┐рдП рдЧрдП рджреЛ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджрд╕рд┐рдпреЛрдВ / рд╕реИрдХрдбрд╝реЛрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, IO.ServerSocket: ListenJob () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЖрдЗрдП рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Cach├й DBMS рдореЗрдВ WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВред
рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реЛрдЧрд╛, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХреИрдЪ рдбреАрдмреАрдПрдордПрд╕ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд┐рд░реНрдорд╛рдг рддрдХрдиреАрдХ ( рд╕реАрдПрд╕рдкреА ) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкрд╛рд╕ рджреГрд╢реНрдп, рдПрдорд╡реАрд╕реА рдФрд░ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ ( рдЬреЗрдбрдИрдПрди ) рдХреЗ рд╕рдореГрджреНрдз рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рддреИрдпрд╛рд░ рдврд╛рдВрдЪрд╛ рднреА рд╣реИред
рдФрд░ рдпрд╛рдж рд░рд╣реЗ рдХрд┐ Cach├й DBMS, OOP рдФрд░ SQL рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, NoSQL рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ ...
рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЦреБрдж рд╣реА WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЪреИрдЯ рд░реВрдо, рдСрдирд▓рд╛рдЗрди рдЧреЗрдо рдФрд░ рд╕рдм рдХреБрдЫ рдЬрд╣рд╛рдВ рд╕рд░реНрд╡рд░ (рдбреЗрдЯрд╛рдмреЗрд╕) рдХреЗ рд╕рд╛рде рдлрд╛рд╕реНрдЯ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдбреЗрдореЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдХреЗрд╡рд▓ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛: 76 рдФрд░ 7ред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрди рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ WebSocket рд╕рдорд░реНрдерди рд╣реИред
рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ IE 8, рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдлреНрд▓реИрд╢ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред
рдЬреЛ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ рд╡реЗ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╕рд░рд▓рддрдо рд╡реЗрдм рдЪреИрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдиреЛрдЯ: Cach├й ObjectScript рдореЗрдВ WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗрд╡рд▓ рд╕реВрдЪрдирд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред
рддреЛ:
- рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ, рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЖрдпрд╛рдд рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдирдореВрдиреЗ";
- рдЕрдкрдирд╛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдБ, рдЬреЛ рдиреЗрдЯ.рдмрд╛рдпрдмреЛрд░реНрдб рдИрд╡реЗрдВрдЯреНрд╕ рд╢реНрд░реЗрдгреА рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
/// .
Class demo.Server Extends net.WebSocketEvents
{
/// onbeforeconnect.
/// <br> .
Method onbeforeconnect() As %Boolean
{
set ^tmp( $i (^tmp), "onbeforeconnect" )= $lb (.. WebSocketGET ,.. WebSocketHost ,.. WebSocketOrigin ,.. WebSocketVer )
q $$$YES
}
/// onconnect.
Method onconnect()
{
set ^tmp( $i (^tmp), "onconnect" )= ""
}
/// onmessage.
/// <br> :
/// <br><var>msg</var> - , .
Method onmessage( msg As %String )
{
set ^tmp( $i (^tmp), "onmessage" )=msg
#; .
/*
do ..send("Cach├йasd"_$random(1000)):msg="get",
..send($replace($j("",32000)," ","├й")):msg="getBig",
..sendBroadcast("from Cach├й to All"):msg="toAll",
..sendBroadcast($$$FormatText(" : %1",$$$quote($p(msg,"^",2)))):$e(msg)="^"
*/
if msg= "get" {
do .. send ( "Cach├йasd" _ $random (1000))
} elseif msg= "getBig" {
do .. send ( $replace ( $j ( "" ,32000), " " , "├й" ))
} elseif msg= "toAll" {
do .. sendBroadcast ( "from Cach├й to All" )
} elseif $e (msg)= "^" {
do .. sendBroadcast ( $$$FormatText ( " : %1" , $$$quote ( $p (msg, "^" ,2))))
}
}
/// onclose.
Method onclose()
{
set ^tmp( $i (^tmp), "onclose" )= ""
}
}
- рдпрджрд┐ рдЖрдк рдПрдХ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдлреНрд▓реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдКрдкрд░ рджреЗрдЦреЗрдВ), рддреЛ рдлреНрд▓реИрд╢ рдкреНрд▓реЗрдпрд░ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреВрд░реНрд╡-рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдиреЛрдЯ: рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ WebSocket рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдУрдкреЗрд░рд╛ рдореЗрдВред
- рд╕рд░реНрд╡рд░ рдкрд░ WebSocket рдХрдиреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ:
SAMPLES>do ##class(net.WebSocketServer).Start("demo.Server")
- рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕, рдкреГрд╖реНрда (рд╡рд░реНрдЧ) рдбреЗрдореЛ.рд╡реЗрдмрдХреНрд▓реАрдЕрдВрдЯ , рдЬрд┐рд╕рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
Class demo.webclient Extends %ZEN.Component.page
{
/// If true, then attempt to refresh this page when its session timeout period has expired.
/// This will cause a login page to display if the current session has ended
/// and security is set to require login.
Parameter AUTOLOGOUT As BOOLEAN = 0 ;
/// Comma-separated list of additional JS include files for the page.
Parameter JSINCLUDES As STRING = "websocket/swfobject.js,websocket/web_socket.js" ;
XData Contents [ XMLNamespace = "www.intersystems.com/zen" ]
{
< page xmlns = "www.intersystems.com/zen" title = "" >
< vgroup labelPosition = "left" >
< label id = "lb" label = " :" />
< text id = "usr" label = ":" />
< button caption = "" onclick = "zenPage.start();" />
< button caption = " 1" label = "Hello123xcf789" onclick = "ws.send('Hello123xcf789');" />
< button caption = " 2" label = "toAll" onclick = "ws.send('toAll');" />
< button caption = " 3" label = "get" onclick = "ws.send('get');" />
< button caption = " 4" label = "getBig" onclick = "ws.send('getBig');" />
< button caption = "" onclick = "ws.close();" />
</ vgroup >
</ page >
}
ClientMethod start() [ Language = javascript ]
{
ws = new WebSocket( "ws://127.0.0.1:10081/asd s HTTP/1.1///" );
ws.onopen = function () {
zenSetProp( 'lb' , 'value' , 'open' );
ws.send( '^' + zenGetProp( 'usr' , 'value' ));
};
ws.onmessage = function (e) {
zenAlert( 'onmessage' , ' length=' ,e.data.length, ' data=' ,e.data);
};
ws.onclose = function () {
zenSetProp( 'lb' , 'value' , 'close' );
};
ws.onerror = function () {
zenAlert( 'onerror' );
};
}
/// This client event, if present, is fired when the page is loaded.
ClientMethod onloadHandler() [ Language = javascript ]
{
// Let the library know where WebSocketMain.swf is:
WEB_SOCKET_SWF_LOCATION = "websocket/WebSocketMain.swf" ;
WEB_SOCKET_DEBUG = false;
}
}
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ "рдкреНрд░рд╛рд░рдВрдн" рдмрдЯрди рджрдмрд╛рдПрдВред рдпрджрд┐ Cach├й DBMS рдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕реНрдЯреЗрдЯрд╕ "рдУрдкрди" рджреЗрдЦреЗрдВрдЧреЗред
рдпрджрд┐ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВред рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░, рд╕рдм рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред - рдЬрдм рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдЪрд╛рд░ рд╣реИрдВ - рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВред
- рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрдд рдореЗрдВ "рд╕реНрдЯреЙрдк" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред
- рдХрдИ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ 6-8 рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред
рдЖрдЗрдП рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЙрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рджреЗрдЦреЗрдВ:
- рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 12
USER>zw ^tmp ^tmp=8 ^tmp(1,"onbeforeconnect")=$lb("/asd%20s%20HTTP/1.1///","127.0.0.1:10081","","hybi-10") ^tmp(2,"onconnect")="" ^tmp(3,"onmessage")="^sdsdf" ^tmp(4,"onmessage")="Hello123xcf789" ^tmp(5,"onmessage")="toAll" ^tmp(6,"onmessage")="get" ^tmp(7,"onmessage")="getBig" ^tmp(8,"onclose")=""
- IE 9
USER>zw ^tmp ^tmp=8 ^tmp(1,"onbeforeconnect")=$lb("/asd s HTTP/1.1///","127.0.0.1:10081","","hybi-10") ^tmp(2,"onconnect")="" ^tmp(3,"onmessage")="^dfg" ^tmp(4,"onmessage")="Hello123xcf789" ^tmp(5,"onmessage")="toAll" ^tmp(6,"onmessage")="get" ^tmp(7,"onmessage")="getBig" ^tmp(8,"onclose")=""
Ws рдХреЗ рдмрдЬрд╛рдп рд╕реБрд░рдХреНрд╖рд┐рдд wss рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
- рдПрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреЛрд░реНрдЯрд▓ рдореЗрдВ SSL рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, WebSocketSSL рдФрд░ " Peer рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рддреНрдпрд╛рдкрди рд╕реНрддрд░ " рдХреЛ " рдХреЛрдИ рдирд╣реАрдВ " рд╕реЗрдЯ рдХрд░реЗрдВред
рдиреЛрдЯ: Cach├й DBMS рдореЗрдВ SSL рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЗрд╕ рдмреНрд▓реЙрдЧ рдХреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- WebSocket рдбреЗрдореЙрди рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЕрдкрдиреЗ SSL рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
SAMPLES>do ##class(net.WebSocketServer).Start("demo.Server",,"WebSocketSSL")
- рдпрджрд┐ рдЖрдк рдПрдХ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдлреНрд▓реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдКрдкрд░ рджреЗрдЦреЗрдВ), рддреЛ рдкрд╣рд▓реЗ рдкреЛрд░реНрдЯ 843 рдкрд░ рдкреЙрд▓рд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдбреЗрдорди рдЪрд▓рд╛рдПрдВ:
SAMPLES>do ##class(net.WebSocketServer).StartPolicy()
- рдкрд╣рд▓реЗ рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рдХрд░ Demo.webclient рдХреНрд▓рд╛рд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ
"ws: //127.0.0.1: 10081 ..."
рдкрд░ "wss: //127.0.0.1: 10081 ..."
- рдЖрдЧреЗ рджреЗрдЦреЗрдВ
рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдПрдХ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдФрд░ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреИрдЪ рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рднреАрддрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛