Blockchain ááá¯á¡ááŒá±áá¶á á¡á
áá¯ážáááŸáá·áºá
ááºááŸá¯ááá¹ááá»á¬ážááœáẠáá±áá¬áá¬ááœááºáá±ážááŸáá·áº á
á®áá¶ááá·áºááœá²ááŸá¯áááááá¬áá»á¬áž ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážáá¯áá±á«áºáá±á¬ ááá±á¬áá»ááºáá
áºáá¯ááᯠááá¯áá±ážáááŒá¬á¡á±á¬áẠáá¯ááºáá±á¬ááºáá±áá«áááºá
ááᯠáá»áœááºá¯ááºááẠá€ááá±á¬áá»ááºááᯠá
áááºáá¯á¶á¡ááŒá±á¬ááºáž ááŒá±á¬ááŒááá¯áááºá ááᯠáá»áœááºá¯ááºááẠáááá¯ááááºáá¯ááºááᯠá¡áá±ážá
ááẠáá±á¬áºááŒáá«áááºá
á€áá±á¬ááºážáá«ážááẠá¡áááºážáááºáá±á¬ááºážáá«ážáá»á¬ážááœáẠááááá¯á¶ážáá±á¬ááºážáá«ážááŒá
áºáááºá á€ááœáẠáá»áœááºá¯ááºááẠáá¬áá¬ááŸáá·áº áááá¯ááá¯áá±á¬ááᯠáá±á¬áºááŒáá«áááºá ááááºáá±á¬á·á á
á¬áááºáá°ááẠဠblockchain ááŒááºá
ááºáá»á¬ážá ááá¯ááºááá¯ááºáá¬ážááŸááºážáá»á¬ážááá¯ááẠáá±ážáá¬ážááá¯ááºáááºá
ááááºááŸá áºá Digital Breakthrough hackathon ááœáẠáááºážááá¯á·ááẠááŒáá·áºáá±áá¬ážáá±á¬ áááºáá»á¬áááºážááá¬ááᯠá¡áá¯á¶ážááŒá¯á á ááºááŸá¯áá¯ááºáááºážááŸáá·áº áá áºáá»á áºáááºá á®ážááœá¬ážáá±ážá¡ááœáẠá¡áá¯á¶ážáááºáá±á¬á áá áºáá áºáá¯ááŒá¯áá¯ááºááẠá áááºáá°ážáá áºáᯠááœááºáá±á«áºáá¬áá²á·ááŒá®áž áá®ááœááºáááºážáá áºááŸá¯á¡áá°á¡áá®áááºáá¯á¶ááœá±á០ááœá¶á·ááŒáá¯ážáá±ážá¡ááœáẠáá±á¬ááºáá¶á·ááœá±ááá¯áááºáž áá¯ááºáá±ážáá²á·áá«áááºá startups áá»á¬áž á áááºáá¯ááºááá¯ááºáá±áá°áá»á¬ážá¡ááœáẠáá±á¬ááºáá¶á·ááŒá±ážá¡ááŒá±á¬ááºáž áá±á¬ááºážáá«áž ) ááŸáá·áº ááá¯áá² ááŸá¬áá°ááá¯ááºáá«á
ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááẠGo áá¬áá¬á
áá¬ážááœááºááŒá
áºááŒá®áž ááá±á¬ááºáá»á¬ážááᯠááááºážáááºážáá¬ážááá·áº áá±áá¬áá±á·á
áºááŸá¬ LevelDB ááŒá
áºáááºá
á¡ááá á¡á
áááºá¡ááá¯ááºážáá»á¬ážááŸá¬ áááá¯ááá¯áá±á¬á áá¬áᬠ(TCP ááŸáá·áº WebSocket ááᯠáá¯ááºáá±á¬ááºááá·áº - ááá blockchain ááᯠáá
áºááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºáááºá áá¯áááááŸá¬ clients áá»á¬ážáá»áááºáááºááŒááºážá á¥ááᬠJavaScript á០ááœá±áá±ážááœá±áá°áá»á¬ážááŸáá·áº á¡áááá·áºáá»á¬ážáá±ážááá¯á·ááŒááºážá¡ááœááºá
áá±á¬áºááŒáá²á·ááá·áºá¡ááá¯ááºážá ဠblockchain ááẠáá±ážááœááºážáá°áá»á¬ážááŸáá·áº áá±á¬ááºáááºáá»á¬ážá¡ááŒá¬áž áá¯ááºáá á¹á ááºážáááŸááºááŸá¯ááᯠááá¯á·ááá¯áẠáá°áá áºáŠážáááºážááœáẠááŸá áºáá¯á áá¯á¶ážááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºáááºááŸáá·áº áá¬ááœááºááẠá¡áááááá¯á¡ááºáá«áááºá áá®áá°ááœá±áᬠáá áºáá±á¬ááºáá²á·áá áºáá±á¬áẠáá¯á¶ááŒááºááá¯á· á¡áá»ááºá ááá¯áááŒá áºáá«áá°ážá ááá¯á·áá±á¬áº á¡áá¯ááºááŸá¬ built-in calculator ááŒáá·áº "checkbook" ááá¯áááºáá®ážáááºáá¬ááá áá¯ááºáá¯ááºááá ááºáááºážááŸáá·áºá¡áá¯ááºáá¯ááºáá±á¬á¡áá«ááœááºáá±á«áºáá±á«ááºáá¬áá±á¬áá¯ááºááá¯ážáá¯ááºá ááºá¡áá¯ááºá¡áá»á¬ážá á¯ááá¯á¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºáá±ážááá·áºá áá áºááŒá áºáááºá á€ááá á¹á á¡ááœáẠáá¬áááºááŸáááá·áº bytecode ááᯠblockchains ááŒáá·áº áá¯á¶ážá á¶á¡ááá¯ááºáž á¡áá±á¬ááºážá¡áááºáá»á¬ážá á¡ááœááºážá¡áá¯ááºáá»á¬ážááŸáá·áº á¡ááœááºáá»á¬ážááœáẠááááºážáááºážáá¬ážáá«ááẠ(ááœá±áá±ážááœá±áá°áá»á¬ážááᯠáááºážááá¯á·ááá¯ááºááá¯áẠááá±á¬ááºáá»á¬ážáá²ááœáẠááááºážáááºážáá¬ážááŒá®áž LevelDB ááŸá ááá±á¬ááºáá»á¬ážááᯠGOB áá±á¬áºáááºááŒáá·áº ááŒáá¯áááºáá¯ááºáá¯ááºáá¬ážáááº)á ááááŠážá áœá¬á áááá¯ááá¯áá±á¬ááŸáá·áº áá¬áᬠ(aka node) á¡ááŒá±á¬ááºáž ááŒá±á¬ááŒáá«á áá¯á·á
áááá¯ááá¯áá±á¬ááẠááŸá¯ááºááœá±ážááŒááºážáááŸááá«á áááºážááá áºáá¯áá¯á¶ážá¡áá»ááºááŸá¬ á¡áá»áá¯á·áá±á¬áá±áá¬áá»á¬ážááᯠáááºáá±á¬ááºááá·áºáá¯ááºááá¯á·ááŒá±á¬ááºážáááºááŒá áºááŒá®ážá á¡áá»á¬ážá¡á¬ážááŒáá·áº ááááºááá¯á·ááŒááºáž ááá¯á·ááá¯áẠá¡áá±á¬ááºážá¡áááºááŒá¯áá¯ááºááŒááºážááŒá áºááŒá®áž á¡áá°ážá¡áááá·áºá á¬ááá¯ááºážáá áºáá¯á¡á¬áž áá¯á¶á·ááŒááºáááºá¡ááœáẠáááºážááẠáá¯ááºáá á¹á ááºážá á¬áááºážááᯠáá²ááŸááºáááºá¡ááœááºáááºáž ááá¯á¡ááºáááºá ááá¯á·ááŒá±á¬áá·áº node ááẠáááºáá°áááºáá«ááŒá áºáááºááᯠááááŸáá á±áááºááŒá áºáááºá áá»áááºáááºáá¬ážááŒá®áž áááºážááá¯á·ááœáẠáá¯ááºáááºážáá¯ááºáá±á¬ááºááẠáááºáá²á·ááá¯á· áá»áááºáááºáá¬ážááẠ(áá áºááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºááŒááºážááá¹áá¡ááœáẠáá»áááºáááºáá¬ážáá±á¬ áá¯á¶ááŸááºáá»á¬ážááᯠáááºážááá¯á·á IP ááᯠââááááŸáááŒá®áž áááºážááá¯á·á ááŒááºáááºáá±áá¬áá»á¬ážááᯠááŸááºáá¬ááºááœáẠááááºážáááºážáá¬ážáá±á¬ááŒá±á¬áá·áº âá¡áááºáá®ážáá»ááºážâ áá¯áááºáž áá±á«áºáááº)á
ááá¯ááºááœá²áá»á¬áž (Linux á áááºážááá¯á·ááᯠáá±á«áºáá±á«áºááá·áº áááºážááœáŸááºáá»á¬áž) ááᯠGo áááá¯ááááºáá¬áá»á¬áž áá¬ážáááºááŸá¯ááœáẠáááºáá±á·áá»áºáá»á¬ážáá¯áá±á«áºáááºá ááá¯á·ááŒá±á¬áá·áº á€áááºážááœáŸááºá០Go áá¯ááºáá«áá±á¬ ááá¯ááºáá áºáá¯á á®áá¡á ááœáẠáááºážááá¯á·ááẠpackage folder_name_where_this_file áááºááŸááááºááᯠáá±ážáá¬ážáááºá ááá¯ááºáá«áá áááºááẠá¡áá¯ááºááᯠcompiler ááá¯á· ááŒáá·áºááœááºážááá¯ááºááẠááá¯ááºáá«á áá±á¬ááºážááŒá®á áá®áá¬áá¬á áá¬ážááá¯áááá²á·áá°ááœá±á¡ááœáẠáá»áŸáá¯á·ááŸááºáá»ááºááá¯ááºáá«áá°ážá á€á¡áá¬áá»á¬ážááẠá¡áá¯ááºáá»á¬áž-
- ááœááºáááºáááºááœááºáá±áž (áá¬áá¬á áá±á¬ááºáááºá áááá¯ááá¯áá±á¬)
- ááááºážáááºážááŒá®áž áá±ážááá¯á·áá¬ážáá±á¬ áá±áá¬ááœá²á·á ááºážáá¯á¶áá»á¬áž (ááááºááá¯á·ááŒááºážá ááœá±áá±ážááœá±áá°)
- áá±áá¬áá±á·á Ạ(blockchain)
- á¡áá»á¬ážááá¹á
- á á¯ááœá²á·áá¬ážáá±á¬ áááá á áẠ(xvm)
- Auxiliary (cryptoá á¡áá»áá¯ážá¡á á¬ážáá»á¬áž) ááẠááá¯á¡áá»áááºááœáẠá¡á¬ážáá¯á¶ážá¡ááœááºááŒá áºáááºá
áááºážááẠááá¬áá±ážááá¯ááºáá¬áá¬ážááŸááºážááŒá áºááŒá®ážá áááºážááẠáá¯ááºáááºážá ááºá¡áá»ááºážáá»ááºáž á¡ááŒááºá¡ááŸááºá¡áá»áá¯ážáááºáá±á¬ááºááŸá¯ááŸáá·áº á ááºážáááºááŸá¯ááá¯ááºáᬠá¡á áááºá¡ááá¯ááºážáá»á¬ážá áœá¬ áááºážáá²á·áá±á¬áºáááºáž ááœá²á·á ááºážáá¯á¶ááẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¯ááºáá±á¬ááºáá±ááá·áºá¡áá¬ááŸáá·áº ááá¯ááºáá®áá«áááºá ááŸááºáá»ááºáá»á¬ážááœáẠá¡ááŒá¶ááŒá¯á áá¬áá»á¬ážááŸááá«áá ááá¯ážáááºááŸá¯á¡ááœáẠááá·áºááœááºážá ááºážá á¬ážááẠáááºážááŒá±á¬ááºáááá«áááºá ááá¯áááºáž áá¬áá¬á ááŸááºážáááºážáá»ááºááŸáá·áº protocol ááá¯.
áá¬áá¬ááᯠá¡áááºááŒáá·áºáá¡á±á¬ááºá
áá¬áá¬áááºá¡á±á¬ááºáá¶áá¯ááºááá¯ážáá¯ááºá ááºááẠáááá¯ááá¯áá±á¬á¡áá¯ááºááŸáá±áá¬ááœá²á·á ááºážáá¯á¶áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯á TCP áááá¯ááá¯áá±á¬áááááºááœááºá¡áá¯ááºáá¯ááºááá·áºáá±áá¬áá¬áá¬á¡ááŒá áºáá¯ááºáá±á¬ááºáááºá
áá¯ááºááá¯ážáá¯ááºá ááºááẠá¡á±á¬ááºáá« áááºáá±á·áá»áºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááº- áá¬áá¬á, protocol ááá¯, á¡áá»áá¯ážá¡á á¬ážáá»á¬áž. á¡áá¯ááºáá²ááŸá¬ áá°á·áá¬áá° tcp_server.go áá±áá¬ááœá²á·á ááºážáá¯á¶áá«ááŸááááºá á¡á á±áá¶.
type Serve struct {
Port string
BufSize int
ST *types.Settings
}
áááºážááẠá¡á±á¬ááºáá«áá±á¬ááºáá»á¬ážááᯠáááºáá¶ááá¯ááºáááº-
- áá±áá¬áááŸááºááá·áº ááœááºáááºáá±á«ááºáá±á«ááº
- JSON áá±á¬áºáááºááŒáá·áº áá¬áá¬ááœá²á·á ááºážááŸá¯ááá¯ááº
- á¡ááŸá¬ážááŸá¬ááŒááºáá¯ááºááœáẠáá¯ááºáá±á¬ááºááẠá¡áᶠ(áá®ážááá·áº blockchain)
ááá¯ážáááºááŸá¯-
- JSON ááá¯ááºá០á á®á ááºáááºááŸááºááŸá¯ááᯠáááºáááºá
- á¡ááŸá¬ážááŸá¬ááŒááºáá¯ááºá¡áá¶ááᯠá¡ááŸááºááŒá áºáá¬ážáááº- áááºážááᯠáááºááŸááºáá«áá ááœááºááẠáááºáá°ááŒá¯ááŒááºáž á¡á á®á¡á ááºááᯠáááœáá·áºááŒáá² blockchain ááᯠááááºáá«
- configuration data structure ááᯠá áááºááŒááºážááŸáá·áº áá¬áá¬ááᯠá áááºááŒááºážá
áá¬áá¬
- áááá¯ááá¯áá±á¬ááŸáá·áºá¡áá® TCP áá¬áá¬ááŸáá·áº ááœááºááẠá¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááŸá¯ááᯠáá¯ááºáá±á¬ááºáááºá
- áááºážááœáẠááá¯á·ááºáá¶áá«ááºá ááŒá¬ážáá¶á¡ááœááºá¡á á¬ážááŸáá·áº ááœá²á·á ááºážáááºáá±á¬ááºáá¯á¶á¡ááœáẠááœáŸááºááŒáá»ááºááá¯á·áá«áááºáá±á¬ áááºáá±á¬ááºááŸá¯áá±áá¬ááœá²á·á ááºážáá¯á¶áá áºáᯠáá«ááŸááááºá á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá áááºáááºáá»á¬áž
- Run áááºážáááºážááẠááœááºááẠá¡ááŒááºá¡ááŸáẠáááºááœááºááŸá¯ááᯠá áááºááẠ(áá±ážáá¬ážááá·áº ááá¯á·ááºáá áºáá¯ááŸá á¡áááºáá»áááºáááºááŸá¯áá»á¬ážááᯠáá¬ážáá±á¬ááºááŒááºážá áá»áááºáááºááŸá¯á¡áá áºáá áºáᯠáááºáá¶áááŸáááá·áºá¡áá« áááºážááá¯ááºáá±á¬ááºááŸá¯ááᯠá á¬ááœá²á¡áá áºáá áºáá¯ááŸá áá®ážááá·áºáááºááá¯ááºáááºážáááºážááá¯á· ááœáŸá²ááŒá±á¬ááºážáá±ážáááº)
- Ð ááá¯ááºááœáẠáá»áááºáááºááŸá¯á០áá±áá¬ááᯠááŒá¬ážáá¶á¡ááŒá áºááá¯á· áááºááŒá®áž string ááá¯ááºá á¬ážááŒá¯ááŸá¯á¡ááŒá áºááá¯á· ááŒá±á¬ááºážáá²ááŒá®áž ááá¯á· áá±ážááá¯á·áááºá áááá¯ááá¯áá±á¬áááœá±ážáá»ááºááŸá¯
- áááá¯ááá¯áá±á¬áááœá±ážáá»ááºááŸá¯ ááŒááºáá¬ááẠáááẠááá¯á·ááá¯áẠá¡ááŸá¬ážá¡ááœááºážááŒá áºá á±áááºá áááẠááá¯á·áá±á¬ááºááá¯á·ááœáŸá²ááŒá±á¬ááºážáá²á·áááºá áááá¯ááá¯áá±á¬áá¡áááá«ááºáááºáááŒááºáá¬áá¬áá²á intrpr - á¡áá¬ááá¹áá¯á¡áá»áá¯ážá¡á á¬áž á áá¬ážááŒááºááá¯á·ááá¯áẠááœá±ážáá»ááºááŸá¯ááááºááᯠáá¯ááºáá±á¬ááºáá¬ááœáẠá¡ááŸá¬ážá¡ááœááºážááŒá áºá á±áááºá
- ááá¯á·áá±á¬áẠswitch ááá¯áá¯ááºáá±á¬ááºáááºá intrpr.Commands[0] áááºážáá²á០áá áºáá¯ááᯠá á áºáá±ážáááº- ááááºá invá á¡ááŸá¬áž á¡ááá¯ááºážáá áºáá¯ááŸááááºá áá»ááºááœááº
- á¡áááá¹áᬠáááẠááá¯ááºááᯠáááºááá¯ážá¡á¬ážááŒáá·áº ááœá±á·áááºá intrpr.Commands[1] áááºááá¯ážáá»á¬ážááá¯á á áºáá±ážáááºá áááºáá¬á¡áá»á¬áž О áá¬ážááŸááºáž (ááá á¹á ááá¯ááºážááœáẠáááºááá¯ááºáᬠfunction áá¯áá±á«áºáááº)
áá¯ááºáááºážáá±á¬ááºáᬠGetVersion О BufferLength ááá¯ááºáá²ááŸá¬ááŸááááºá srvlib.go áá¬áá¬á¡áá¯ááº
GetVersion(conn net.Conn, version string)
áááºážááẠááœááºááá¯ážááºááá¯á· ááá¯ážááŸááºážá áœá¬ áááá·áºáá¯ááºááŒá®áž ááá·áºáááºáá±á¬ááºá¡ááœááºáž ááŒááºáá¬ážáá±á¬ áá¬ážááŸááºážááᯠáá¯á¶ážá áœá²áá°áᶠáá±ážááá¯á·áááº-
conn.Write([]byte("result:" + version))
.
áá¯ááºáá±á¬ááºáá»ááº
BufferLength(conn net.Conn, intrpr *protocol.InterpreteData)
á¡á±á¬ááºáá±á¬áºááŒáá«á¡ááá¯ááºáž ááááºááá¯á·ááŒááºážá ááœá±áá±ážááœá±áá° ááá¯á·ááá¯áẠá¡ááŒá¬ážáá±á¬ áá®ážááŒá¬ážáá±áá¬ááᯠáááºáá«-
- áááºáá¶áááºááá¯á¡ááºááá·áº áááá¯ááá¯áá±á¬ááœáẠáááºááŸááºáá¬ážááá·áº áá±áá¬á¡áá»áá¯ážá¡á
á¬ážááᯠááœááºááá¯ážááºááá¯á· áááá·áºáá¯ááºáááº-
fmt.Println("DataType:", intrpr.Commands[2])
- áááºááá¯ážááá¯áááºáááºá intrpr.ááá¯ááºááẠááááºážááá¬ááºážááŒá±á¬ááºážáá²ááŸá¯áá áºáá¯ááá¯á· buf_len
- ááŒá¬ážáá¶áá
áºáᯠáááºáá®ážáááºá newbuf áááºááŸááºáá¬ážáá±á¬á¡ááœááºá¡á
á¬áž
make([]byte, buf_len)
- OK áá¯á¶á·ááŒááºáá»ááºááᯠáá±ážááá¯á·áááº-
conn.Write([]byte("result:ok"))
- áááºááŸá¯áá¬ážáá±á¬ stream á០ááŒá¬ážáá¶ááᯠá¡ááŒáá·áºá¡á ááŒáá·áºáá±ážáááº-
io.ReadFull(conn, newbuf)
.
- ááŒá¬ážáá¶áá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠááœááºááá¯ážááºááá¯á· áááá·áºáá¯ááºáá«á
fmt.Println(string(newbuf))
ááŸáá·áºáááºáá±á¬ bytes á¡áá±á¡ááœááº
fmt.Println("Bytes length:", n)
- OK áá¯á¶á·ááŒááºáá»ááºááᯠáá±ážááá¯á·áááº-
conn.Write([]byte("result:ok"))
áá¬áá¬áááºáá±á·áá»áºá០áááºážáááºážáá»á¬ážááᯠáááºáá±á·áá»áºá០áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºáá¶áááŸáááá·áºáá±áá¬ááᯠá á®áá¶áá±á¬ááºááœááºáá±ážááẠá á®á ááºáá¬ážáááºá protocol ááá¯.
áááá¯ááá¯áá±á¬
áááá¯ááá¯áá±á¬ááẠááœááºáááºáááŸááºááŸá¯ááœáẠáá±áá¬ááᯠááá¯ááºá á¬ážááŒá¯ááá·áº áááºážáááºážáá áºáá¯á¡ááŒá Ạáá¯ááºáá±á¬ááºáááºá
ááœá±ážáá»ááºááŸá¯(str string) (á á¬ááŒá±á¬ááºážá á¡ááŸá¬áž) áá¬áá¬á០áááºáá¶áááŸááá±á¬ áá±áá¬á á¡ááá áá¯ááºáááºážá ááºááᯠáá¯ááºáá±á¬ááºáááºá ááá·áºááœááºážááŸá¯á¡ááŒá Ạáá±áá¬á á á¬ááŒá±á¬ááºážááá¯ááºá á¬ážááŒá¯ááŸá¯ááᯠáááºáá¶áááŸáááŒá®áž ááŒááºáááºáá¬ážááá·áº á á¬ááŒá±á¬ááºážááᯠááŒááºáá±ážáááºá á áá¬ážááŒááº:
- input string ááᯠá¡áá¯á¶ážááŒá¯á áá±á«ááºážááŸáá·áº ááá¹áá¬ááá¯áẠááœá²áá¬ážáááºá ReqParseN2(str)
- áá±á«ááºážááᯠááŒááºá ááºáá»á¬ážá¡ááŒá Ạááœá²ááŒá®áž ReqParseHead(head) ááᯠá¡áá¯á¶ážááŒá¯á á¡áááá·áºáá±ážááá·áº á¡áá»ááºáá áºáá¯á¡ááŒá Ạááá·áºáá¬ážáááºá
- Ð ááá¯ááº(á¡áááá·áºá á¬[0]) áááºáá¶áááŸááá±á¬á¡áááá·áºááá¯ááœá±ážáá»ááºáá« (cmdá áá±á¬á·á ááááºá ᬠááá¯á·ááá¯áẠá¡ááá¯ááºážááᯠá¡á áá»áá¯ážáá¬ážáááºá áá»ááºááœááº)
- command 2 áá¯ááᯠcmd ááœáẠá¡ááŸááºááŒá áºáá¬ážáááºá switch(commands[1]) â á¡ááŸáẠО ááŒá±á¬ááºážááŒááº.
- á¡ááŸáẠáá±áá¬á¡áá»áá¯ážá¡á á¬ážááᯠá á áºáá±ážáááºá á¡áááá·áºáá»á¬áž[2] ááááºážáááºážáá«á á¡áá»áá¯ážá¡á á¬áž
- á¡á²áá«ááᯠá
á
áºáá±ážáááºá ááá¯ááºááá¹áᬠá
á¬ááŒá±á¬ááºážáááºááá¯ážáá
áºáá¯áá«ááŸááááºá
len(body) < 1
- áá¯á¶á·ááŒááºááŸá¯á
á¬ááŒá±á¬ááºážááᯠááŒááºáá±ážáááº-
"result:bufferlength:" + datatype + "/" + body
- ááŒá±á¬ááºážááŒáẠá
á¬ááŒá±á¬ááºážáá
áºáᯠááŒááºáá±ážáááºá
return "result:version/auto"
á áá¬ážááŒááº
InterpreteData áááºáá±á¬ááºáá¯á¶ áá«áááºááŒá®áž ááŸááŒááºáá¬áá±á¬ áá±áá¬á ááá·áºááœá¬ážáá¯ááºáá±á¬ááºááŸá¯ááᯠáá¯ááºáá±á¬ááºáááºá ááŸá±ážááá»áŒááœáá»áž ááŒáá¯ážáá»á¬ážááŸáá·áº á¡áá¬ááá¹áá¯ááœá²á·á ááºážááŒááºáž á áá¬ážááŒááº.
type InterpreteData struct {
Head string
Commands []string
Body string
IsErr bool
ErrCode int
ErrMessage string
}
áá¯ááºáá±á¬ááºáá»ááº
Interprete(str string) (*InterpreteData, error)
string ááá¯áááºáá¶áááºá áááẠá¡áá¬ááá¹áá¯ááᯠáááºááœáŸááºážáá»ááºáá áºáᯠáááºáá®ážááŒá®áž ááŒááºáá±ážáááºá á áá¬ážááŒááº.
ááá¯ážáááºááŸá¯-
- á¡áá¬ážáá°ááẠááŸá±ážááá»áŒááœáá»áž áŠážáá±á«ááºážááŸáá·áº ááá¹áá¬ááá¯ááºááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºáá°áááºá ReqParseN2(str)
- áŠážáá±á«ááºážááᯠá¡á áááºá¡ááá¯ááºážáá»á¬ážá¡ááŒá Ạááœá²áá¬ážáááºá ReqParseHead(áá±á«ááºáž)
- á¡áá¬ááá¹áá¯ááᯠá¡á ááŒá¯áá¬ážáááºá á áá¬ážááŒáẠááœáŸááºááŒáá»ááºááᯠááŒááºáá±ážáááºá
res := &InterpreteData{
Head: head,
Commands: commands,
Body: body,
}
return res, nil
á€á¡áá¬ááá¹áá¯ááᯠá¡áá¯á¶ážááŒá¯áááºá server.go package main áá«á
áá±á¬ááºáááº
client package ááœáẠfunctions áá»á¬ážáá«ááŸááááºá TCPConnect О TCPResponseData.
áá¯ááºáá±á¬ááºáá»ááº
TCPConnect(s *types.Settings, data []byte, payload []byte)
á€áá²á·ááá¯á·áá¯ááºáá±á¬ááºáááº-
- áá»áááºáááºááŸá¯áá
áºáá¯ááẠááœááºáááºáááºáá»á¬áž á¡áá¬ááá¹áá¯ááœáẠáááºááŸááºáá¬ážááá·áº áá»áááºáááºááŸá¯ááᯠááŒá¯áá¯ááºáá¬ážáááºá
net.Dial("tcp", s.Host + ":" + s.Port)
- data parameter ááœáẠááŒááºááœá¬ážáá±á¬ data ááᯠááá¯á·áááº-
conn.Write(data)
- á¡ááŒá±ááá¯áááºáá«á
resp, n, _ := TCPResponseData(conn, s.BufSize)
ááœááºááá¯ážááºáá±á«áºááœáẠááá¯ááºááŸáááºáá¬ážáááºá
fmt.Println(string(resp[:n]))
- ááœáŸá²áá±ážáá»áŸáẠpayload ááŒá®ážááẠáááºááœá¬ážáá«á
conn.Write(payload)
áá¬áá¬áá¯á¶á·ááŒááºááŸá¯ááá¯áááºáž áááºááŒá®áž áááºážááᯠááœááºááá¯ážááºááá¯á· áá¯á¶ááŸáááºáááºá
áá¯ááºáá±á¬ááºáá»ááº
TCPResponseData(conn net.Conn, bufsiz int) ([]byte, int, error)
áááºááŸááºáá¬ážáá±á¬ á¡ááœááºá¡á á¬ážá ááŒá¬ážáá¶áá áºáá¯ááᯠáááºáá®ážááŒá®áž ááá¯áá±áá¬ááœáẠáá¬áá¬áá¯á¶á·ááŒááºááŸá¯ááᯠáááºááŒá®áž á€ááŒá¬ážáá¶ááŸáá·áº áááºááá·áºááá¯ááºá¡áá±á¡ááœááºá¡ááŒáẠá¡ááŸá¬ážá¡ááœááºážá¡áá¬ááá¹áá¯ááᯠááŒááºáá±ážáááºá
ááá¯ááºážááœá²áá¯ááºááá¯ážáá¯ááºá ááº
node áá¬áá¬áá»á¬ážááá¯á· ááœáŸááºááŒá¬ážáá»ááºáá»á¬áž áá±ážááá¯á·ááŒááºážá¡ááŒáẠááááºážááááºážá¡áá»ááºážáá»á¯ááºááŸáá·áº á ááºážáááºááŒááºážáá»á¬ážááᯠááá°ááẠáá±á¬ááºááœááºáá«áááºá
á¡á±á¬ááºáá« ááá·áºáááºáá»ááºáá»á¬ážááᯠáááºáá¶ááá¯ááºáááº- JSON áá±á¬áºáááºááŸá ááœá²á·á ááºážááŸá¯ááá¯ááºá á á¬áá¬ážáá áºáá¯á¡ááŒá Ạáá¬áá¬ááá¯á· áá±ážááá¯á·áááá·áº áá±áá¬á payload ááá¯á· áá±ážááá¯á·áááá·áº ááá¯ááºááá¯á· áááºážááŒá±á¬ááºážá node á¡áá»áááºááá¬ážááœá²ááá·áº á¡áá¯á¡áá±á¬ááºá¡áá¶á ááááºážáááºááá¯ážá¡ááŒá ẠááœáŸá²ááŒá±á¬ááºážáá¬ážáá±á¬ áá±áá¬á¡áá»áá¯ážá¡á á¬ážá
- ááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶ááᯠááá°ááŒááºážá
st := types.ParseConfig(*config)
- emu á¡áá¶ááá¯áá»á±á¬áºááœá¬ážáá«áá áááºážáááºá áááºáááºá sheduler
- ááá¯ááºááá¯á· áááºážááŒá±á¬ááºážááᯠááœáŸááºááŒáá±á¬ f á¡áá¶ááᯠáá¶á·ááá¯ážáá¬ážáá«áá áá»áœááºá¯ááºááá¯á·ááẠáááºážá áá±áá¬ááᯠáááºáá«áááºá fdb á¡ááŒá±á¬ááºážá¡áá¬ááᯠáá¬áá¬ááá¯á· áá±ážááá¯á·áááºá
client.TCPConnect(st, []byte(CMD_BUFFER_LENGTH + ":" + strconv.Itoa(*t) + "/" + strconv.Itoa(fdblen)), fdb)
- á¡áááºá ááá¯ááºááᯠááááºááŸááºáá¬ážáá«áá á¡áá¶á០áá±áá¬ááᯠááá¯ážááá¯ážááŸááºážááŸááºáž áá±ážááá¯á·áááºá -d:
client.TCPConnect(st, []byte(*data), nil)
á€á¡áá¬á¡á¬ážáá¯á¶ážááẠáááá¯ááá¯áá±á¬áááœá²á·á ááºážáá¯á¶ááá¯ááŒáááá·áº ááá¯ážááŸááºážáá±á¬ááá¯ááºá á¬ážááŒá¯ááŸá¯ááŒá áºáááºá ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±á ááºá¡ááœááºáž ááá¯á¡ááºáá±á¬ áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠáááºážáááœá²á·á ááºážáá¯á¶ááœáẠááá·áºááœááºážáá¬ážáááºá
áá¯áááá¡ááá¯ááºážááœáẠblocks áá»á¬ážááŸáá·áº ááœá±áá±ážááœá±áá°áá»á¬ážá¡ááœáẠáá±áá¬áááºáá±á¬ááºáá¯á¶áá»á¬ážá¡ááŒá±á¬ááºážá 3 ááœáẠJavaScript ááŸáá»áááºáááºáááºá¡ááœáẠWebSocket server á¡ááŒá±á¬ááºážá 4 ááœáẠsynchronization scheduler ááá¯ááŒáá·áºááŸá¯áááºááŒá
áºááŒá®ážá ááá¯á·áá±á¬ááºááœáẠinputs ááŸáá·áº outputs áá»á¬ážá០bytecode ááá¯áá¯ááºáá±á¬ááºáá±á¬ stack machine áá
áºáá¯á cryptography ááŸáá·áº á¡ááœááºáá»á¬ážá¡ááœáẠáá±áá°ážáááºáá»á¬ážá
source: www.habr.com