์ ๋ ์ง๊ธ๊น์ง XNUMX๊ฐ์ ๋์ โ๋ธ๋ก์ฒด์ธ ๊ธฐ๋ฐ ์ ๋ถ ๋ฐ ์ฐ์
๋ถ๋ฌธ์ ๋ฐ์ดํฐ ๋ณดํธ ๋ฐ ๊ด๋ฆฌ ๋๊ตฌ ๊ฐ๋ฐโ์ด๋ผ๋ ํ๋ก์ ํธ๋ฅผ ์งํํด ์์ต๋๋ค.
์ด์ ์ ๊ฐ ์ด ํ๋ก์ ํธ๋ฅผ ์ด๋ป๊ฒ ์์ํ๊ฒ ๋์๋์ง ๋ง์๋๋ฆฌ๊ณ , ์ด์ ํ๋ก๊ทธ๋จ ์ฝ๋์ ๋ํด ์์ธํ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
์ด๊ฒ์ ์ผ๋ จ์ ๊ธฐ์ฌ ์ค ์ฒซ ๋ฒ์งธ ๊ธฐ์ฌ์
๋๋ค. ์ฌ๊ธฐ์๋ ์๋ฒ์ ํ๋กํ ์ฝ์ ๋ํด ์ค๋ช
ํฉ๋๋ค. ์ค์ ๋ก ๋
์๋ ์ด๋ฌํ ๋ธ๋ก์ฒด์ธ ์์์ ๋ํด ์์ ๋ง์ ๋ฒ์ ์ ์์ฑํ ์๋ ์์ต๋๋ค.
์๋ ์ ์ด๋ฆฐ Digital Breakthrough ํด์ปคํค์์ ๊ทธ๋ค์ ๋ถ์ฐ์์ฅ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ฐ์ ๊ณผ ๋์งํธ ๊ฒฝ์ ์ ์ ์ฉํ ์์คํ ์ ๋ง๋๋ ์์ด๋์ด๋ฅผ ๋ด๋์๊ณ , ํ์ ์ง์ ๊ธฐ๊ธ์ ๊ฐ๋ฐ์ ์ํ ๋ณด์กฐ๊ธ๋ ์ง๊ธ๋์์ต๋๋ค. ์ด์ ๋ง ์คํํธ์ ์ ์์ํ๋ ์ฌ๋๋ค์ ์ํ ๋ณด์กฐ๊ธ ๊ด๋ จ ๊ธฐ์ฌ), ์ด์ ์์๋๋ก ์ ๋ฆฌํ์ต๋๋ค.
๊ฐ๋ฐ์ Go ์ธ์ด๋ก ์ด๋ฃจ์ด์ง๋ฉฐ ๋ธ๋ก์ด ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ LevelDB์
๋๋ค.
์ฃผ์ ๋ถ๋ถ์ ํ๋กํ ์ฝ, ์๋ฒ(TCP ๋ฐ WebSocket์ ์คํํ๋ ์๋ฒ)์
๋๋ค. ์ฒซ ๋ฒ์งธ๋ ๋ธ๋ก์ฒด์ธ ๋๊ธฐํ๋ฅผ ์ํ ๊ฒ์ด๊ณ , ๋ ๋ฒ์งธ๋ ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ, JavaScript์์ ํธ๋์ญ์
๋ฐ ๋ช
๋ น ์ ์ก์ ์ํ ๊ฒ์
๋๋ค.
์์ ์ธ๊ธํ ๋ฐ์ ๊ฐ์ด, ์ด ๋ธ๋ก์ฒด์ธ์ ์ฃผ๋ก ๊ณต๊ธ์ ์ฒด์ ๊ณ ๊ฐ ์ฌ์ด ๋๋ ํ ์ฌ๋์ ์ ํ ๊ตํ์ ์๋ํํ๊ณ ๋ณดํธํ๋ ๋ฐ ํ์ํฉ๋๋ค. ์ด ์ฌ๋๋ค์ ์๋ก๋ฅผ ์ ๋ขฐํ๊ธฐ ์ํด ์๋๋ฅด์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ฌด๋ ๋ด์ฅ๋ ๊ณ์ฐ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ "์ํ์ฅ"์ ๋ง๋๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ์ ํ ์๋ช ์ฃผ๊ธฐ ์์ ์ ๋ฐ์ํ๋ ๋๋ถ๋ถ์ ์ผ์์ ์ธ ์์ ์ ์๋ํํ๋ ์์คํ ์ ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ๋ด๋นํ๋ ๋ฐ์ดํธ์ฝ๋๋ ๋ธ๋ก์ฒด์ธ์ ๊ด๋ก๋๋ก ํธ๋์ญ์ ์ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ์ ์ ์ฅ๋ฉ๋๋ค(ํธ๋์ญ์ ์์ฒด๋ ๋ธ๋ก์ ์ ์ฅ๋๊ณ LevelDB์ ๋ธ๋ก์ GOB ํ์์ผ๋ก ์ฌ์ ์ธ์ฝ๋ฉ๋ฉ๋๋ค). ๋จผ์ ํ๋กํ ์ฝ๊ณผ ์๋ฒ(๋ ธ๋๋ผ๊ณ ๋ ํจ)์ ๋ํด ์ด์ผ๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค.
ํ๋กํ ์ฝ์ ๋ณต์กํ์ง ์์ผ๋ฉฐ, ์์ ์ ํน๋ณํ ๋ช ๋ น์ค์ ๋ํ ์๋ต์ผ๋ก ์ผ๋ถ ๋ฐ์ดํฐ(์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ก ๋๋ ํธ๋์ญ์ )๋ฅผ ๋ก๋ํ๋ ๋ชจ๋๋ก ์ ํํ๋ ๊ฒ์ด๋ฉฐ ์ธ๋ฒคํ ๋ฆฌ ๊ตํ์๋ ํ์ํ๋ฏ๋ก ๋ ธ๋๊ฐ ๋๊ตฌ์ธ์ง ์ ์ ์์ต๋๋ค. ์ฐ๊ฒฐ๋์ด ์๊ณ ๋น์ฆ๋์ค๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ(๋๊ธฐํ ์ธ์ ์ ์ํด ์ฐ๊ฒฐ๋ ๋ ธ๋๋ IP๊ฐ ์๋ ค์ ธ ์๊ณ ์ํ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ฏ๋ก "์ด์"์ด๋ผ๊ณ ๋ ํจ)
Go ํ๋ก๊ทธ๋๋จธ๊ฐ ์ดํดํ๋ ํด๋(Linux์์ ๋ถ๋ฅด๋ ๋๋ ํ ๋ฆฌ)๋ฅผ ํจํค์ง๋ผ๊ณ ๋ถ๋ฅด๋ฏ๋ก ์ด ๋๋ ํ ๋ฆฌ์ Go ์ฝ๋๊ฐ ์๋ ๊ฐ ํ์ผ์ ์์ ๋ถ๋ถ์ ํจํค์ง๋ฅผ ์์ฑํ๋ ํด๋_์ด๋ฆ_์ด_ํ์ผ์ด ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํจํค์ง๋ฅผ ์ปดํ์ผ๋ฌ์ ๊ณต๊ธํ ์ ์์ต๋๋ค. ๊ธ์, ์ด๊ฒ์ ์ด ์ธ์ด๋ฅผ ์๋ ์ฌ๋๋ค์๊ฒ๋ ๋น๋ฐ์ด ์๋๋๋ค. ํจํค์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋คํธ์ํฌ ํต์ (์๋ฒ, ํด๋ผ์ด์ธํธ, ํ๋กํ ์ฝ)
- ์ ์ฅ ๋ฐ ์ ์ก๋๋ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ(๋ธ๋ก, ํธ๋์ญ์ )
- ๋ฐ์ดํฐ๋ฒ ์ด์ค(๋ธ๋ก์ฒด์ธ)
- ์๊ฒฌ ์ผ์น
- ์คํํ ๊ฐ์ ๋จธ์ (xvm)
- ์ง๊ธ์ ๋ณด์กฐ(์ํธํ, ์ ํ)๊ฐ ์ ๋ถ์ ๋๋ค.
์ด๊ฒ์ ๊ต์ก์ฉ ๋ฒ์ ์ด๋ฉฐ ํ๋ก์ธ์ค ๊ฐ ์ํธ ์์ฉ๊ณผ ์ฌ๋ฌ ์คํ ๊ตฌ์ฑ ์์๊ฐ ๋ถ์กฑํ์ง๋ง ๊ตฌ์กฐ๋ ๊ฐ๋ฐ์ด ์ํ๋๋ ๊ฒ๊ณผ ์ผ์นํฉ๋๋ค. ๋๊ธ๋ก ์ ์ํ์ค ์ฌํญ์ด ์์ผ์๋ฉด ํฅํ ๊ฐ๋ฐ์ ๋ฐ์ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ์ด์ ์๋ฒ์ ๋ํ ์ค๋ช ๊ณผ ํ๋กํ ์ฝ.
๋จผ์ ์๋ฒ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์๋ฒ ์๋ธ๋ฃจํด์ ํ๋กํ ์ฝ ํจํค์ง์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ TCP ํ๋กํ ์ฝ ์์์ ์คํ๋๋ ๋ฐ์ดํฐ ์๋ฒ ์ญํ ์ ํฉ๋๋ค.
๋ฃจํด์ ๋ค์ ํจํค์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฌ๊ธฐ๋ ์ฌ๋, ํ๋กํ ์ฝ, ์ ํ. ํจํค์ง ์์ฒด์๋ tcp_server.go ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํฌํจ ์๋ธ.
type Serve struct {
Port string
BufSize int
ST *types.Settings
}
๋ค์ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ๊ฐ ๊ตํ๋ ๋คํธ์ํฌ ํฌํธ
- JSON ํ์์ ์๋ฒ ๊ตฌ์ฑ ํ์ผ
- ๋๋ฒ๊ทธ ๋ชจ๋ ์คํ์ ์ํ ํ๋๊ทธ(ํ๋ผ์ด๋น ๋ธ๋ก์ฒด์ธ)
์ง์ :
- JSON ํ์ผ์์ ๊ตฌ์ฑ์ ์ฝ์ต๋๋ค.
- ๋๋ฒ๊ทธ ๋ชจ๋ ํ๋๊ทธ๊ฐ ํ์ธ๋ฉ๋๋ค. ์ค์ ๋ ๊ฒฝ์ฐ ๋คํธ์ํฌ ๋๊ธฐํ ์ค์ผ์ค๋ฌ๊ฐ ์์๋์ง ์๊ณ ๋ธ๋ก์ฒด์ธ์ด ๋ก๋๋์ง ์์ต๋๋ค.
- ๊ตฌ์ฑ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ด๊ธฐํ ๋ฐ ์๋ฒ ์์
์๋ฒ
- ํ๋กํ ์ฝ์ ๋ฐ๋ผ TCP ์๋ฒ ์์ ๋ฐ ๋คํธ์ํฌ ์ํธ ์์ฉ์ ์ํํฉ๋๋ค.
- ํฌํธ ๋ฒํธ, ๋ฒํผ ํฌ๊ธฐ ๋ฐ ๊ตฌ์กฐ์ ๋ํ ํฌ์ธํฐ๋ก ๊ตฌ์ฑ๋ Serve ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ ํ.์ค์
- Run ๋ฉ์๋๋ ๋คํธ์ํฌ ์ํธ ์์ฉ์ ์์ํฉ๋๋ค(์ง์ ๋ ํฌํธ์์ ๋ค์ด์ค๋ ์ฐ๊ฒฐ์ ์์ ํ๊ณ ์ ์ฐ๊ฒฐ์ด ์์ ๋๋ฉด ํด๋น ์ฒ๋ฆฌ๊ฐ ์ ์ค๋ ๋์ ๊ฐ์ธ ํธ๋ค ๋ฉ์๋๋ก ์ ์ก๋ฉ๋๋ค).
- ะ ํธ๋ค ์ฐ๊ฒฐ์ ๋ฐ์ดํฐ๋ ๋ฒํผ๋ก ์ฝํ์ง๊ณ ๋ฌธ์์ด ํํ์ผ๋ก ๋ณํ๋์ด ์ ๋ฌ๋ฉ๋๋ค. ํ๋กํ ์ฝ.์ ํ
- ํ๋กํ ์ฝ.์ ํ ๋ฐํ ๊ฒฐ๊ณผ ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ฒฐ๊ณผ ๋ค์์ผ๋ก ์ ์ก ํ๋กํ ์ฝ.ํด์์ด๋ ๋ฐํ ๋ด๋ถ - ์ ํ์ ๊ฐ์ฒด ๋ฐ์ดํฐ ํด์, ๋๋ ์ ํ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ๊ทธ๋ฐ ๋ค์ ์ค์์น๊ฐ ์คํ๋ฉ๋๋ค. intrpr.๋ช ๋ น[0] ๋ค์ ์ค ํ๋๋ฅผ ํ์ธํฉ๋๋ค. ๊ฒฐ๊ณผ, inv, ์ค๋ฅ ๊ทธ๋ฆฌ๊ณ ์น์ ์ด ์์ด์ ๋ํดํธ ๊ฐ
- ์น์ ์์ ๊ฒฐ๊ณผ ์ค์์น๋ ๊ฐ์ผ๋ก ๋ฐ๊ฒฌ๋ฉ๋๋ค. intrpr.๋ช ๋ น[1] ๊ฐ์ ํ์ธํ๋ ๊ฒ ๋ฒํผ ๊ธธ์ด ะธ ๋ฒ์ (๊ฐ ๊ฒฝ์ฐ์ ํด๋น ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค)
๊ธฐ๋ฅ ๋ฒ์ ๊ฐ์ ธ์ค๊ธฐ ะธ ๋ฒํผ ๊ธธ์ด ํ์ผ์ ์์ต๋๋ค 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.Body ์ซ์ ๋ณ์์ buf_len
- ๋ฒํผ๋ฅผ ์์ฑํฉ๋๋ค ๋ด๋ฒํ ์ง์ ๋ ํฌ๊ธฐ:
make([]byte, buf_len)
- ok ์๋ต์ ๋ณด๋
๋๋ค.
conn.Write([]byte("result:ok"))
- ์ฝ๊ธฐ ์คํธ๋ฆผ์์ ๋ฒํผ๋ฅผ ์์ ํ ์ฑ์๋๋ค.
io.ReadFull(conn, newbuf)
.
- ๋ฒํผ์ ๋ด์ฉ์ ์ฝ์์ ์ธ์ํฉ๋๋ค.
fmt.Println(string(newbuf))
๊ทธ๋ฆฌ๊ณ ์ฝ์ ๋ฐ์ดํธ ์
fmt.Println("Bytes length:", n)
- ok ์๋ต์ ๋ณด๋
๋๋ค.
conn.Write([]byte("result:ok"))
์๋ฒ ํจํค์ง์ ๋ฉ์๋๋ ํจํค์ง์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ํ๋กํ ์ฝ.
ํ๋กํ ์ฝ
ํ๋กํ ์ฝ์ ๋คํธ์ํฌ ๊ตํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๋ ์๋จ ์ญํ ์ ํฉ๋๋ค.
Choice(str string) (๋ฌธ์์ด, ์ค๋ฅ) ์๋ฒ์์ ๋ฐ์ ๋ฐ์ดํฐ์ ๊ธฐ๋ณธ ์ฒ๋ฆฌ๋ฅผ ์ํํ๊ณ , ๋ฐ์ดํฐ์ ๋ฌธ์์ด ํํ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ค๋น๋ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. ํต์ญ์ฌ:
- ์ ๋ ฅ ๋ฌธ์์ด์ ๋ค์์ ์ฌ์ฉํ์ฌ ํค๋์ ๋ณธ๋ฌธ์ผ๋ก ๋ถํ ๋ฉ๋๋ค. ReqParseN2(str)
- ํค๋๋ ์์๋ก ๋ถํ ๋๊ณ ReqParseHead(head)๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ๋ น ์ฌ๋ผ์ด์ค์ ๋ฐฐ์น๋ฉ๋๋ค.
- ะ ์ค์์น(๋ช ๋ น[0]) ์์ ๋ ๋ช ๋ น์ ์ ํํฉ๋๋ค(cmd, ํค, ์ฃผ์ ๋๋ ์น์ ์ด ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ๋ํดํธ ๊ฐ)
- 2๊ฐ์ ๋ช ๋ น์ด cmd์์ ํ์ธ๋ฉ๋๋ค. ์ค์์น(๋ช ๋ น[1]) โ ๊ธธ์ด ะธ getversion.
- ๊ธธ์ด ๋ฐ์ดํฐ ์ ํ์ ํ์ธํฉ๋๋ค. ๋ช ๋ น[2] ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ ์ฅํฉ๋๋ค ๋ฐ์ดํฐ ํ์
- ํ์ธ ๋ชธ ๋ฌธ์์ด ๊ฐ์ ํฌํจํฉ๋๋ค
len(body) < 1
- ์๋ต ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
"result:bufferlength:" + datatype + "/" + body
- getversion ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค
return "result:version/auto"
ํต์ญ์ฌ
InterpreteData ๊ตฌ์กฐ๋ฅผ ํฌํจํ๊ณ InterpreteData ๊ตฌ์กฐ์์ ๋ฐํ๋ ๋ฐ์ดํฐ์ XNUMX์ฐจ ์ฒ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. ์ ํ ๋ฌธ์์ด๊ณผ ๊ฐ์ฒด ํ์ฑ ๋ฐ์ดํฐ ํด์.
type InterpreteData struct {
Head string
Commands []string
Body string
IsErr bool
ErrCode int
ErrMessage string
}
๊ธฐ๋ฅ
Interprete(str string) (*InterpreteData, error)
๋ฌธ์์ด์ ๋ฐ์๋ค์ ๋๋ค ๊ฒฐ๊ณผ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์์ฑํ๊ณ ๋ฐํํฉ๋๋ค. ๋ฐ์ดํฐ ํด์.
์ง์ :
- ์ ์ฌํ๊ฒ ์ ํ ๋จธ๋ฆฌ์ ๋ชธํต์ ๋ค์์ ์ฌ์ฉํ์ฌ ์ถ์ถ๋ฉ๋๋ค. ReqParseN2(str)
- ๋จธ๋ฆฌ๋ ๋ค์์ ์ฌ์ฉํ์ฌ ์์๋ก ๋ถํ ๋ฉ๋๋ค. ReqParseHead(ํค๋)
- ๊ฐ์ฒด๊ฐ ์ด๊ธฐํ๋์์ต๋๋ค. ๋ฐ์ดํฐ ํด์ ๊ทธ๋ฆฌ๊ณ ์ด์ ๋ํ ํฌ์ธํฐ๊ฐ ๋ฐํ๋ฉ๋๋ค:
res := &InterpreteData{
Head: head,
Commands: commands,
Body: body,
}
return res, nil
์ด ๊ฐ์ฒด๋ ๋ค์์์ ์ฌ์ฉ๋ฉ๋๋ค. server.go ํจํค์ง ๋ฉ์ธ.
Client
ํด๋ผ์ด์ธํธ ํจํค์ง์๋ ๋ค์ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค. TCPConnect ะธ TCP์๋ต๋ฐ์ดํฐ.
๊ธฐ๋ฅ
TCPConnect(s *types.Settings, data []byte, payload []byte)
๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค.
- ์ ๋ฌ๋ ์ค์ ๊ฐ์ฒด์ ์ง์ ๋ ์ฐ๊ฒฐ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
net.Dial("tcp", s.Host + ":" + s.Port)
- data ๋งค๊ฐ๋ณ์์ ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ก๋ฉ๋๋ค.
conn.Write(data)
- ๋ต์ ์ฝ์๋ค
resp, n, _ := TCPResponseData(conn, s.BufSize)
๊ทธ๋ฆฌ๊ณ ์ฝ์์ ์ธ์๋จ
fmt.Println(string(resp[:n]))
- ์๋๋ ๊ฒฝ์ฐ ํ์ด๋ก๋ ๊ทธ๋ฐ ๋ค์ ์ ๋ฌํฉ๋๋ค
conn.Write(payload)
๋ํ ์๋ฒ ์๋ต์ ์ฝ๊ณ ์ฝ์์ ์ธ์ํฉ๋๋ค.
๊ธฐ๋ฅ
TCPResponseData(conn net.Conn, bufsiz int) ([]byte, int, error)
์ง์ ๋ ํฌ๊ธฐ์ ๋ฒํผ๋ฅผ ์์ฑํ๊ณ ๊ฑฐ๊ธฐ์์ ์๋ฒ ์๋ต์ ์ฝ๊ณ ์ด ๋ฒํผ์ ์ฝ์ ๋ฐ์ดํธ ์ ๋ฐ ์ค๋ฅ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
ํด๋ผ์ด์ธํธ ์๋ธ๋ฃจํด
๋ ธ๋ ์๋ฒ์ ๋ช ๋ น์ ๋ณด๋ด๊ณ ๊ฐ๋ตํ ํต๊ณ ๋ฐ ํ ์คํธ๋ฅผ ์ป๋ ์ญํ ์ ํฉ๋๋ค.
๋ค์ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค: JSON ํ์์ ๊ตฌ์ฑ ํ์ผ, ์๋ฒ์ ๋ฌธ์์ด๋ก ์ ์กํ ๋ฐ์ดํฐ, ํ์ด๋ก๋๋ก ์ ์กํ ํ์ผ ๊ฒฝ๋ก, ๋ ธ๋ ์ค์ผ์ค๋ฌ ์๋ฎฌ๋ ์ด์ ํ๋๊ทธ, ์ซ์ ๊ฐ์ผ๋ก ์ ์ก๋๋ ๋ฐ์ดํฐ ์ ํ.
- ๊ตฌ์ฑ ๊ฐ์ ธ์ค๊ธฐ
st := types.ParseConfig(*config)
- emu ํ๋๊ทธ๊ฐ ์ ๋ฌ๋๋ฉด ์์๋ฉ๋๋ค. ์ ฐ๋๋ฌ
- ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ f ํ๋๊ทธ๊ฐ ์ ๊ณต๋๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ FDB ์ฝํ
์ธ ๊ฐ ์๋ฒ๋ก ์ ์ก๋ฉ๋๋ค.
client.TCPConnect(st, []byte(CMD_BUFFER_LENGTH + ":" + strconv.Itoa(*t) + "/" + strconv.Itoa(fdblen)), fdb)
- ํ์ผ์ด ์ง์ ๋์ง ์์ผ๋ฉด ํ๋๊ทธ์ ๋ฐ์ดํฐ๊ฐ ๋จ์ํ ์ ์ก๋ฉ๋๋ค. -d:
client.TCPConnect(st, []byte(*data), nil)
์ด ๋ชจ๋ ๊ฒ์ ํ๋กํ ์ฝ์ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋จ์ํ๋ ํํ์ ๋๋ค. ๊ฐ๋ฐ ์ค์ ํ์ํ ๊ธฐ๋ฅ์ด ํด๋น ๊ตฌ์กฐ์ ์ถ๊ฐ๋ฉ๋๋ค.
๋ ๋ฒ์งธ ๋ถ๋ถ์์๋ ๋ธ๋ก ๋ฐ ํธ๋์ญ์
์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํด ์ค๋ช
ํ๊ณ , 3๋ถ์์๋ JavaScript์์ ์ฐ๊ฒฐํ๊ธฐ ์ํ WebSocket ์๋ฒ์ ๋ํด ์ค๋ช
ํ๊ณ , 4๋ถ์์๋ ๋๊ธฐํ ์ค์ผ์ค๋ฌ๋ฅผ ์ดํด๋ณธ ๋ค์ ์
๋ ฅ ๋ฐ ์ถ๋ ฅ, ์ํธํ ๋ฐ ์ํธํ์์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ฒ๋ฆฌํ๋ ์คํ ๋จธ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ถ๋ ฅ์ฉ ํ.
์ถ์ฒ : habr.com