DBMS Cach├й рдореЗрдВ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

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 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗрд╡рд▓ рд╕реВрдЪрдирд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред

рддреЛ:
  1. рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ, рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЖрдпрд╛рдд рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдирдореВрдиреЗ";
  2. рдЕрдкрдирд╛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдБ, рдЬреЛ рдиреЗрдЯ.рдмрд╛рдпрдмреЛрд░реНрдб рдИрд╡реЗрдВрдЯреНрд╕ рд╢реНрд░реЗрдгреА рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред

    рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

    /// .
    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" )= ""
    }

    }
  3. рдпрджрд┐ рдЖрдк рдПрдХ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдлреНрд▓реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдКрдкрд░ рджреЗрдЦреЗрдВ), рддреЛ рдлреНрд▓реИрд╢ рдкреНрд▓реЗрдпрд░ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреВрд░реНрд╡-рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
    рдиреЛрдЯ: рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ WebSocket рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдУрдкреЗрд░рд╛ рдореЗрдВред
  4. рд╕рд░реНрд╡рд░ рдкрд░ WebSocket рдХрдиреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ:
     SAMPLES>do ##class(net.WebSocketServer).Start("demo.Server") 
  5. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕, рдкреГрд╖реНрда (рд╡рд░реНрдЧ) рдбреЗрдореЛ.рд╡реЗрдмрдХреНрд▓реАрдЕрдВрдЯ , рдЬрд┐рд╕рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

    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;
    }

    }
  6. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ "рдкреНрд░рд╛рд░рдВрдн" рдмрдЯрди рджрдмрд╛рдПрдВред рдпрджрд┐ Cach├й DBMS рдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕реНрдЯреЗрдЯрд╕ "рдУрдкрди" рджреЗрдЦреЗрдВрдЧреЗред
    рдпрджрд┐ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВред рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░, рд╕рдм рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  7. рдЬрдм рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдЪрд╛рд░ рд╣реИрдВ - рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВред
  8. рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрдд рдореЗрдВ "рд╕реНрдЯреЙрдк" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред
  9. рдХрдИ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ 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 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
  1. рдПрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреЛрд░реНрдЯрд▓ рдореЗрдВ SSL рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, WebSocketSSL рдФрд░ " Peer рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рддреНрдпрд╛рдкрди рд╕реНрддрд░ " рдХреЛ " рдХреЛрдИ рдирд╣реАрдВ " рд╕реЗрдЯ рдХрд░реЗрдВред
    рдиреЛрдЯ: Cach├й DBMS рдореЗрдВ SSL рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЗрд╕ рдмреНрд▓реЙрдЧ рдХреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  2. WebSocket рдбреЗрдореЙрди рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЕрдкрдиреЗ SSL рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
     SAMPLES>do ##class(net.WebSocketServer).Start("demo.Server",,"WebSocketSSL") 
  3. рдпрджрд┐ рдЖрдк рдПрдХ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдлреНрд▓реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдКрдкрд░ рджреЗрдЦреЗрдВ), рддреЛ рдкрд╣рд▓реЗ рдкреЛрд░реНрдЯ 843 рдкрд░ рдкреЙрд▓рд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдбреЗрдорди рдЪрд▓рд╛рдПрдВ:
     SAMPLES>do ##class(net.WebSocketServer).StartPolicy() 
  4. рдкрд╣рд▓реЗ рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рдХрд░ Demo.webclient рдХреНрд▓рд╛рд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ
      "ws: //127.0.0.1: 10081 ..." 
    рдкрд░
      "wss: //127.0.0.1: 10081 ..." 
  5. рдЖрдЧреЗ рджреЗрдЦреЗрдВ

рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдПрдХ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдФрд░ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреИрдЪ рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рднреАрддрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛

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


All Articles