ืคื™ืชื•ื— ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืœืชืขืฉื™ื™ื” ื‘ืืžืฆืขื•ืช Go. ื—ืœืง 1

ื›ื‘ืจ ืืจื‘ืขื” ื—ื•ื“ืฉื™ื ืฉืื ื™ ืขื•ื‘ื“ ืขืœ ืคืจื•ื™ืงื˜ ืฉื ืงืจื "ืคื™ืชื•ื— ื›ืœื™ ื”ื’ื ืช ืžื™ื“ืข ื•ื ื™ื”ื•ืœ ื‘ืžื’ื–ืจื™ื ืžืžืฉืœืชื™ื™ื ื•ืชืขืฉื™ื™ืชื™ื™ื ืขืœ ื‘ืกื™ืก ื‘ืœื•ืงืฆ'ื™ื™ืŸ".
ืขื›ืฉื™ื• ืื ื™ ืจื•ืฆื” ืœืกืคืจ ืœื›ื ืขืœ ืื™ืš ื”ืชื—ืœืชื™ ืืช ื”ืคืจื•ื™ืงื˜ ื”ื–ื”, ื•ืขื›ืฉื™ื• ืืชืืจ ืืช ืงื•ื“ ื”ืชื•ื›ื ื™ืช ื‘ืคื™ืจื•ื˜.

ืคื™ืชื•ื— ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืœืชืขืฉื™ื™ื” ื‘ืืžืฆืขื•ืช Go. ื—ืœืง 1

ื–ื”ื• ื”ืžืืžืจ ื”ืจืืฉื•ืŸ ื‘ืกื“ืจืช ืžืืžืจื™ื. ื›ืืŸ ืื ื™ ืžืชืืจ ืืช ื”ืฉืจืช ื•ื”ืคืจื•ื˜ื•ืงื•ืœ. ืœืžืขืฉื”, ื”ืงื•ืจื ื™ื›ื•ืœ ืืคื™ืœื• ืœื›ืชื•ื‘ ื’ืจืกืื•ืช ืžืฉืœื• ืœืžืจื›ื™ื‘ื™ ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ ื”ืœืœื•.

ื•ื”ื ื” ื”ื—ืœืง ื”ืฉื ื™ - ืขืœ ื‘ืœื•ืงืฆ'ื™ื™ืŸ ื•ืžื‘ื ื™ ื ืชื•ื ื™ื ืฉืœ ืขืกืงืื•ืช, ื›ืžื• ื’ื ืขืœ ื”ื—ื‘ื™ืœื” ื”ืžื™ื™ืฉืžืช ืื™ื ื˜ืจืืงืฆื™ื” ืขื ืžืกื“ ื”ื ืชื•ื ื™ื.

ื‘ืฉื ื” ืฉืขื‘ืจื”, ื‘ื”ืืงืชื•ืŸ ืคืจื™ืฆืช ื“ืจืš ื“ื™ื’ื™ื˜ืœื™ืช, ื”ื ื”ืขืœื• ืจืขื™ื•ืŸ ืœื™ืฆื•ืจ ืžืขืจื›ืช ืฉื™ืžื•ืฉื™ืช ืœืชืขืฉื™ื™ื” ื•ืœื›ืœื›ืœื” ื”ื“ื™ื’ื™ื˜ืœื™ืช ื‘ืืžืฆืขื•ืช ื˜ื›ื ื•ืœื•ื’ื™ื™ืช ืกืคืจื™ ื—ืฉื‘ื•ื ื•ืช ืžื‘ื•ื–ืจื™ื; ื›ืžื• ื›ืŸ ื”ื•ื ืคืง ืžืขื ืง ืœืคื™ืชื•ื— ืขืœ ื™ื“ื™ ืงืจืŸ ื”ืกื™ื•ืข ืœื—ื“ืฉื ื•ืช (ืื ื™ ืฆืจื™ืš ืœื›ืชื•ื‘ ื ืคืจื“ ืžืืžืจ ืขืœ ื”ืžืขื ืง, ืœืžื™ ืฉืจืง ืžืชื—ื™ืœ ืœืขืฉื•ืช ืกื˜ืืจื˜ืืคื™ื), ื•ืขื›ืฉื™ื• ื‘ืกื“ืจ.

ื”ืคื™ืชื•ื— ืžืชื‘ืฆืข ื‘ืฉืคืช Go, ื•ืžืกื“ ื”ื ืชื•ื ื™ื ื‘ื• ืžืื•ื—ืกื ื™ื ื”ื‘ืœื•ืงื™ื ื”ื•ื LevelDB.
ื”ื—ืœืงื™ื ื”ืขื™ืงืจื™ื™ื ื”ื ื”ืคืจื•ื˜ื•ืงื•ืœ, ื”ืฉืจืช (ืฉืžืจื™ืฅ TCP ื•-WebSocket - ื”ืจืืฉื•ืŸ ืœืกื ื›ืจื•ืŸ ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ, ื”ืฉื ื™ ืœื—ื™ื‘ื•ืจ ืœืงื•ื—ื•ืช, ืฉืœื™ื—ืช ืขืกืงืื•ืช ื•ืคืงื•ื“ื•ืช ืž-JavaScript, ืœืžืฉืœ.

ื›ืืžื•ืจ, ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ ื”ื–ื” ื ื—ื•ืฅ ื‘ืขื™ืงืจ ื›ื“ื™ ืœืžื›ืŸ ื•ืœื”ื’ืŸ ืขืœ ื”ื—ืœืคืช ืžื•ืฆืจื™ื ื‘ื™ืŸ ืกืคืงื™ื ืœืœืงื•ื—ื•ืช, ืื• ืฉื ื™ื”ื ื‘ืื“ื ืื—ื“. ื”ืื ืฉื™ื ื”ืืœื” ืœื ืžืžื”ืจื™ื ืœืกืžื•ืš ื–ื” ืขืœ ื–ื”. ืื‘ืœ ื”ืžืฉื™ืžื” ื”ื™ื ืœื ืจืง ืœื™ืฆื•ืจ "ืคื ืงืก ืฆ'ืงื™ื" ืขื ืžื—ืฉื‘ื•ืŸ ืžื•ื‘ื ื”, ืืœื ืžืขืจื›ืช ืฉืžืžื›ื ืช ืืช ืจื•ื‘ ื”ืžืฉื™ืžื•ืช ื”ืฉื’ืจืชื™ื•ืช ืฉืขื•ืœื•ืช ื‘ืขื‘ื•ื“ื” ืขื ืžื—ื–ื•ืจ ื—ื™ื™ ื”ืžื•ืฆืจ. ื”-bytecode ืฉืื—ืจืื™ ืœืขื ื™ื™ืŸ ื–ื”, ื›ืžืงื•ื‘ืœ ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ, ื ืฉืžืจ ื‘ื›ื ื™ืกื•ืช ื•ื‘ื™ืฆื™ืื•ืช ืฉืœ ื˜ืจื ื–ืงืฆื™ื•ืช (ื”ืขืกืงืื•ืช ืขืฆืžืŸ ืžืื•ื—ืกื ื•ืช ื‘ื‘ืœื•ืงื™ื, ื”ื‘ืœื•ืงื™ื ื‘-LevelDB ืžืงื•ื“ื“ื™ื ืžืจืืฉ ื‘ืคื•ืจืžื˜ GOB). ืจืืฉื™ืช, ื‘ื•ืื• ื ืกืคืจ ืœื›ื ืขืœ ื”ืคืจื•ื˜ื•ืงื•ืœ ื•ื”ืฉืจืช (ื”ืžื›ื•ื ื” ื’ื ืฆื•ืžืช).

ื”ืคืจื•ื˜ื•ืงื•ืœ ืœื ืžืกื•ื‘ืš, ื›ืœ ื”ืงื˜ืข ืฉืœื• ื”ื•ื ืœืขื‘ื•ืจ ืœืžืฆื‘ ืฉืœ ื˜ืขื™ื ืช ื ืชื•ื ื™ื ืžืกื•ื™ืžื™ื, ื‘ื“ืจืš ื›ืœืœ ื‘ืœื•ืง ืื• ื˜ืจื ื–ืงืฆื™ื”, ื‘ืชื’ื•ื‘ื” ืœืฉื•ืจืช ืคืงื•ื“ื” ืžื™ื•ื—ื“ืช, ื•ื”ื•ื ื ื—ื•ืฅ ื’ื ืœื”ื—ืœืคืช ืžืœืื™, ื›ื“ื™ ืฉื”ืฆื•ืžืช ื™ื™ื“ืข ืžื™ ื”ื•ื. ืžื—ื•ื‘ืจ ื•ืื™ืš ื™ืฉ ืœื”ื ืขืกืงื™ื ืœืขืฉื•ืช (ื”ืฆืžืชื™ื ื”ืžื—ื•ื‘ืจื™ื ืœืกืฉืŸ ื”ืกื ื›ืจื•ืŸ ื ืงืจืื™ื ื’ื "ืฉื›ื ื™ื" ืžื›ื™ื•ื•ืŸ ืฉื”-IP ืฉืœื”ื ื™ื“ื•ืข ื•ื ืชื•ื ื™ ื”ืžืฆื‘ ืฉืœื”ื ืžืื•ื—ืกื ื™ื ื‘ื–ื™ื›ืจื•ืŸ).

ืชื™ืงื™ื•ืช (ืกืคืจื™ื•ืช ื›ืคื™ ืฉืœื™ื ื•ืงืก ืžื›ื ื” ืื•ืชืŸ) ื‘ื”ื‘ื ืช ืžืชื›ื ืชื™ Go ื ืงืจืื•ืช ื—ื‘ื™ืœื•ืช, ืœื›ืŸ ื‘ืชื—ื™ืœืช ื›ืœ ืงื•ื‘ืฅ ืขื ืงื•ื“ Go ืžื”ืกืคืจื™ื™ื” ื”ื–ื• ื”ื ื›ื•ืชื‘ื™ื ื—ื‘ื™ืœื” folder_name_where_this_file ื ืžืฆื. ืื—ืจืช, ืœื ืชื•ื›ืœ ืœื”ื–ื™ืŸ ืืช ื”ื—ื‘ื™ืœื” ืœืžื”ื“ืจ. ื•ื‘ื›ืŸ, ื–ื” ืœื ืกื•ื“ ืœืžื™ ืฉื™ื•ื“ืข ืืช ื”ืฉืคื” ื”ื–ื•. ืืœื• ื”ื—ื‘ื™ืœื•ืช:

  • ืชืงืฉื•ืจืช ืจืฉืช (ืฉืจืช, ืœืงื•ื—, ืคืจื•ื˜ื•ืงื•ืœ)
  • ืžื‘ื ื™ื ืฉืœ ื ืชื•ื ื™ื ืžืื•ื—ืกื ื™ื ื•ืžืฉื•ื“ืจื™ื (ื—ืกื™ืžื”, ืขืกืงื”)
  • ืžืกื“ ื ืชื•ื ื™ื (ื‘ืœื•ืงืฆ'ื™ื™ืŸ)
  • ืงื•ึนื ืกึถื ื–ื•ึผืก
  • ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืžื•ืขืจืžืช (xvm)
  • ืขื–ืจ (ืงืจื™ืคื˜ื•, ืกื•ื’ื™ื) ื–ื” ื”ื›ืœ ืœืขืช ืขืชื”.

ื”ื ื” ื”ืงื™ืฉื•ืจ ืœ-github

ื–ื•ื”ื™ ื’ืจืกื” ื—ื™ื ื•ื›ื™ืช, ื”ื™ื ื—ืกืจื” ืื™ื ื˜ืจืืงืฆื™ื” ื‘ื™ืŸ-ืชื”ืœื™ื›ื™ืช ื•ืžืกืคืจ ืžืจื›ื™ื‘ื™ื ื ื™ืกื™ื•ื ื™ื™ื, ืืš ื”ืžื‘ื ื” ืชื•ืื ืœื–ื” ืฉืขืœื™ื• ืžืชื‘ืฆืข ื”ืคื™ืชื•ื—. ืื ื™ืฉ ืœืš ืžืฉื”ื• ืœื”ืฆื™ืข ื‘ื”ืขืจื•ืช, ืืฉืžื— ืœืงื—ืช ื–ืืช ื‘ื—ืฉื‘ื•ืŸ ื‘ื”ืžืฉืš ื”ืคื™ืชื•ื—. ื•ืขื›ืฉื™ื• ืœื”ืกื‘ืจ ืขืœ ื”ืฉืจืช ื• ืคืจื•ื˜ื•ืงื•ืœ.

ื‘ื•ื ื ืกืชื›ืœ ืงื•ื“ื ืขืœ ื”ืฉืจืช.

ืชืช ืฉื’ืจืช ื”ืฉืจืช ืคื•ืขืœืช ื›ืฉืจืช ื ืชื•ื ื™ื ื”ืคื•ืขืœ ืขืœ ื’ื‘ื™ ืคืจื•ื˜ื•ืงื•ืœ TCP ื‘ืืžืฆืขื•ืช ืžื‘ื ื™ ื ืชื•ื ื™ื ืžื—ื‘ื™ืœืช ื”ืคืจื•ื˜ื•ืงื•ืœ.

ื”ืฉื’ืจื” ืžืฉืชืžืฉืช ื‘ื—ื‘ื™ืœื•ืช ื”ื‘ืื•ืช: ืฉืจืช, ืคืจื•ื˜ื•ืงื•ืœ, ืกื•ื’ื™ื. ื‘ื—ื‘ื™ืœื” ืขืฆืžื” tcp_server.go ืžื›ื™ืœ ืžื‘ื ื” ื ืชื•ื ื™ื ืœึฐืฉืึธืจึตืช.

type Serve struct {
	Port string
	BufSize int
	ST *types.Settings
}

ื–ื” ื™ื›ื•ืœ ืœืงื‘ืœ ืืช ื”ืคืจืžื˜ืจื™ื ื”ื‘ืื™ื:

  • ื™ืฆื™ืืช ืจืฉืช ืฉื“ืจื›ื” ื™ื•ื—ืœืคื• ื ืชื•ื ื™ื
  • ืงื•ื‘ืฅ ืชืฆื•ืจืช ื”ืฉืจืช ื‘ืคื•ืจืžื˜ JSON
  • ืกืžืŸ ืœื”ืคืขืœื” ื‘ืžืฆื‘ ื ื™ืคื•ื™ ื‘ืื’ื™ื (ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืคืจื˜ื™)

ื”ืชืงื“ืžื•ืช:

  • ืงื•ืจื ืชืฆื•ืจื” ืžืงื•ื‘ืฅ JSON
  • ื“ื’ืœ ืžืฆื‘ ื ื™ืคื•ื™ ื‘ืื’ื™ื ืžืกื•ืžืŸ: ืื ื”ื•ื ืžื•ื’ื“ืจ, ืžืชื–ืžืŸ ื”ืกื ื›ืจื•ืŸ ืฉืœ ื”ืจืฉืช ืœื ืžื•ืคืขืœ ื•ื”- blockchain ืœื ื ื˜ืขืŸ
  • ืืชื—ื•ืœ ืžื‘ื ื” ื ืชื•ื ื™ ื”ืชืฆื•ืจื” ื•ื”ืคืขืœืช ื”ืฉืจืช

ืฉืจืช

  • ืžื‘ืฆืข ืืช ื”ืฉืงืช ืฉืจืช ื”-TCP ื•ื”ืื™ื ื˜ืจืืงืฆื™ื” ื‘ืจืฉืช ื‘ื”ืชืื ืœืคืจื•ื˜ื•ืงื•ืœ.
  • ื™ืฉ ืœื• ืžื‘ื ื” ื ืชื•ื ื™ื ืฉืœ Serve ื”ืžื•ืจื›ื‘ ืžืžืกืคืจ ื™ืฆื™ืื”, ื’ื•ื“ืœ ืžืื’ืจ ื•ืžืฆื‘ื™ืข ืœืžื‘ื ื” ืกื•ื’ื™ื.ื”ื’ื“ืจื•ืช
  • ืฉื™ื˜ืช ื”ื”ืคืขืœื” ืžืชื—ื™ืœื” ืื™ื ื˜ืจืืงืฆื™ื” ื‘ืจืฉืช (ื”ืื–ื ื” ืœื—ื™ื‘ื•ืจื™ื ื ื›ื ืกื™ื ื‘ืคื•ืจื˜ ื ืชื•ืŸ, ื›ืืฉืจ ืžืชืงื‘ืœ ื—ื™ื‘ื•ืจ ื—ื“ืฉ, ื”ืขื™ื‘ื•ื“ ืฉืœื• ืžื•ืขื‘ืจ ืœืฉื™ื˜ืช ื”ื˜ื™ืคื•ืœ ื”ืคืจื˜ื™ ื‘ืฉืจืฉื•ืจ ื—ื“ืฉ)
  • ะ’ ืœื˜ืคืœ ื ืชื•ื ื™ื ืžื”ื—ื™ื‘ื•ืจ ื ืงืจืื™ื ืœืžืื’ืจ, ืžื•ืžืจื™ื ืœื™ื™ืฆื•ื’ ืžื—ืจื•ื–ืช ื•ืžื•ืขื‘ืจื™ื ืืœ ืคืจื•ื˜ื•ืงื•ืœ.ื‘ื—ื™ืจื”
  • ืคืจื•ื˜ื•ืงื•ืœ.ื‘ื—ื™ืจื” ื”ื—ื–ืจื•ืช ืชื•ืฆืื” ืื• ื’ื•ืจื ืœืฉื’ื™ืื”. ืชื•ืฆืื” ืœืื—ืจ ืžื›ืŸ ื”ื•ืขื‘ืจ ืœ ืคืจื•ื˜ื•ืงื•ืœ.ืœืคืจืฉืฉืžื—ื–ื™ืจื” intrpr - ืื•ื‘ื™ื™ืงื˜ ืžืกื•ื’ InterpreteData, ืื• ื’ื•ืจื ืœืฉื’ื™ืื” ื‘ืขื™ื‘ื•ื“ ืชื•ืฆืืช ื”ื‘ื—ื™ืจื”
  • ืœืื—ืจ ืžื›ืŸ ื”ืžืขื‘ืจ ืžืชื‘ืฆืข intrpr.Commands[0] ืฉื‘ื•ื“ืง ืื—ื“ ืž: ืชื•ืฆืื”, inv, error ื•ื™ืฉ ืงื˜ืข ื‘ืจื™ืจืช ืžื—ื“ืœ
  • ื‘ืงื˜ืข ืชื•ืฆืื” ืžืชื’ ื ืžืฆื ืœืคื™ ืขืจืš intrpr.Commands[1] ืฉื‘ื•ื“ืง ืืช ื”ืขืจื›ื™ื ืื•ืจืš ื—ื™ืฅ ะธ ื’ืจืกื” (ื‘ื›ืœ ืžืงืจื” ื ืงืจืืช ื”ืคื•ื ืงืฆื™ื” ื”ืžืชืื™ืžื”)

ืคื•ื ืงืฆื™ื•ืช GetVersion ะธ ืื•ืจืš ืžืื’ืจ ื ืžืฆืื™ื ื‘ืงื•ื‘ืฅ 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
  • ื™ื•ืฆืจ ื—ื•ืฆืฅ newbuf ื’ื•ื“ืœ ืฉืฆื•ื™ืŸ:
    make([]byte, buf_len)
  • ืฉื•ืœื— ืชื’ื•ื‘ื” ื‘ืกื“ืจ:
    conn.Write([]byte("result:ok"))
  • ืžืžืœื ืœื—ืœื•ื˜ื™ืŸ ืืช ื”ืžืื’ืจ ืžื–ืจื ื”ืงืจื™ืื”:
    io.ReadFull(conn, newbuf)

    .

  • ืžื“ืคื™ืก ืืช ืชื•ื›ืŸ ื”ืžืื’ืจ ืœืงื•ื ืกื•ืœื”
    fmt.Println(string(newbuf))

    ื•ืžืกืคืจ ื”ื‘ืชื™ื ืฉื ืงืจืื•

    fmt.Println("Bytes length:", n)
  • ืฉื•ืœื— ืชื’ื•ื‘ื” ื‘ืกื“ืจ:
    conn.Write([]byte("result:ok"))

ืฉื™ื˜ื•ืช ืžื—ื‘ื™ืœืช ื”ืฉืจืช ืžื•ื’ื“ืจื•ืช ืœืขื™ื‘ื•ื“ ื ืชื•ื ื™ื ืฉื”ืชืงื‘ืœื• ื‘ืืžืฆืขื•ืช ืคื•ื ืงืฆื™ื•ืช ืžื”ื—ื‘ื™ืœื” ืคืจื•ื˜ื•ืงื•ืœ.

ืคืจื•ื˜ื•ืงื•ืœ

ืคืจื•ื˜ื•ืงื•ืœ ืžืฉืžืฉ ื›ืืžืฆืขื™ ื”ืžื™ื™ืฆื’ ื ืชื•ื ื™ื ื‘ื—ื™ืœื•ืคื™ ืจืฉืชื•ืช.

Choice(str string) (ืžื—ืจื•ื–ืช, ืฉื’ื™ืื”) ืžื‘ืฆืข ืขื™ื‘ื•ื“ ืจืืฉื•ื ื™ ืฉืœ ื ืชื•ื ื™ื ื”ืžืชืงื‘ืœื™ื ืขืœ ื™ื“ื™ ื”ืฉืจืช, ืžืงื‘ืœ ื™ื™ืฆื•ื’ ืžื—ืจื•ื–ืช ืฉืœ ื”ื ืชื•ื ื™ื ื›ืงืœื˜ ื•ืžื—ื–ื™ืจ ืžื—ืจื•ื–ืช ืฉื”ื•ื›ื ื” ืขื‘ื•ืจ ืžึฐืชื•ึผืจื’ึฐืžึธืŸ:

  • ืžื—ืจื•ื–ืช ื”ืงืœื˜ ืžืคื•ืฆืœืช ืœืจืืฉ ื•ืœื’ื•ืฃ ื‘ืืžืฆืขื•ืช ReqParseN2(str)
  • head ืžืคื•ืฆืœ ืœืืœืžื ื˜ื™ื ื•ืžืžื•ืงื ืœืคืจื•ืกืช ืคืงื•ื“ื•ืช ื‘ืืžืฆืขื•ืช ReqParseHead(head)
  • ะ’ switch(ืคืงื•ื“ื•ืช[0]) ื‘ื—ืจ ืืช ื”ืคืงื•ื“ื” ืฉื”ืชืงื‘ืœื” (cmd, ืžืคืชื—, ื›ืชื•ื‘ืช ืื• ืฉื”ืงื˜ืข ืžื•ืคืขืœ ื‘ืจื™ืจืช ืžื—ื“ืœ)
  • 2 ืคืงื•ื“ื•ืช ืžืกื•ืžื ื•ืช ื‘-cmd switch(ืคืงื•ื“ื•ืช[1]) - ืื•ืจืš ะธ getversion.
  • ืื•ืจืš ื‘ื•ื“ืง ืืช ืกื•ื’ ื”ื ืชื•ื ื™ื ืคืงื•ื“ื•ืช[2] ื•ืฉื•ืžืจ ืื•ืชื• ืคื ื™ืžื” ืกื•ื’ ืžื™ื“ืข
  • ื‘ื•ื“ืง ืืช ื–ื” ื’ื•ึผืฃ ืžื›ื™ืœ ืขืจืš ืžื—ืจื•ื–ืช
    len(body) < 1
  • ืžื—ื–ื™ืจื” ืืช ืžื—ืจื•ื–ืช ื”ืชื’ื•ื‘ื”:
    "result:bufferlength:" + datatype + "/" + body
  • getversion ืžื—ื–ื™ืจ ืžื—ืจื•ื–ืช
    return "result:version/auto"

ืžึฐืชื•ึผืจื’ึฐืžึธืŸ

ืžื›ื™ืœ ืืช ืžื‘ื ื” InterpreteData ื•ืžื‘ืฆืข ืขื™ื‘ื•ื“ ืžืฉื ื™ ืฉืœ ื”ื ืชื•ื ื™ื ื”ืžื•ื—ื–ืจื™ื ืžื”ื ื‘ื—ื™ืจื” ืžื™ืชืจื™ื ื•ื™ืฆื™ืจืช ืื•ื‘ื™ื™ืงื˜ InterpreteData.

type InterpreteData struct {
	Head string
	Commands []string
	Body string
	IsErr bool
	ErrCode int 
	ErrMessage string
}

ืคื•ื ืงืฆื™ื”

Interprete(str string) (*InterpreteData, error)

ืžืงื‘ืœ ืžื—ืจื•ื–ืช ืชื•ืฆืื” ื•ื™ื•ืฆืจ ื•ืžื—ื–ื™ืจ ื”ืชื™ื™ื—ืกื•ืช ืœืื•ื‘ื™ื™ืงื˜ InterpreteData.

ื”ืชืงื“ืžื•ืช:

  • ื‘ืื•ืคืŸ ื“ื•ืžื” ื‘ื—ื™ืจื” ืจืืฉ ื•ื’ื•ืฃ ื ืฉืœืคื™ื ื‘ืืžืฆืขื•ืช ReqParseN2(str)
  • ื”ืจืืฉ ืžื—ื•ืœืง ืœืืœืžื ื˜ื™ื ื‘ืืžืฆืขื•ืช ReqParseHead(head)
  • ื”ืื•ื‘ื™ื™ืงื˜ ืžืื•ืชื—ืœ InterpreteData ื•ืžืฆื‘ื™ืข ืืœื™ื• ืžื•ื—ื–ืจ:

res := &InterpreteData{
	Head: head,
	Commands: commands,
	Body: body,
}
return res, nil

ืื•ื‘ื™ื™ืงื˜ ื–ื” ืžืฉืžืฉ ื‘ server.go ื”ื—ื‘ื™ืœื” ื”ืจืืฉื™ืช.

ืœืงื•ื—

ื—ื‘ื™ืœืช ื”ืœืงื•ื— ืžื›ื™ืœื” ืืช ื”ืคื•ื ืงืฆื™ื•ืช TCPConnect ะธ TCPResponseData.

ืคื•ื ืงืฆื™ื”

TCPConnect(s *types.Settings, data []byte, payload []byte)

ืขื•ื‘ื“ ื›ืš:

  • ื ื•ืฆืจ ื—ื™ื‘ื•ืจ ืœื—ื™ื‘ื•ืจ ืฉืฆื•ื™ืŸ ื‘ืื•ื‘ื™ื™ืงื˜ ื”ื”ื’ื“ืจื•ืช ืฉืขื‘ืจ
    net.Dial("tcp", s.Host + ":" + s.Port)
  • ื”ื ืชื•ื ื™ื ื”ืžื•ืขื‘ืจื™ื ื‘ืคืจืžื˜ืจ ื”ื ืชื•ื ื™ื ืžื•ืขื‘ืจื™ื:
    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)
  • ืื ื“ื’ืœ ื”ืืžื• ืขื•ื‘ืจ, ื”ื•ื ืžืชื—ื™ืœ ืžืฉืคื™ืœ
  • ืื ื“ื’ืœ f ื”ืžืฆื™ื™ืŸ ืืช ื”ื ืชื™ื‘ ืœืงื•ื‘ืฅ ืžืกื•ืคืง, ืื ื• ื˜ื•ืขื ื™ื ืืช ื”ื ืชื•ื ื™ื ืฉืœื• ืœืชื•ืš fdb ื•ื”ืชื•ื›ืŸ ื ืฉืœื— ืœืฉืจืช
    client.TCPConnect(st, []byte(CMD_BUFFER_LENGTH + ":" + strconv.Itoa(*t) + "/" + strconv.Itoa(fdblen)), fdb)
  • ืื ื”ืงื•ื‘ืฅ ืœื ืฆื•ื™ืŸ, ื”ื ืชื•ื ื™ื ืžื”ื“ื’ืœ ืคืฉื•ื˜ ื ืฉืœื—ื™ื -d:
    client.TCPConnect(st, []byte(*data), nil)

ื›ืœ ื–ื” ื”ื•ื ื™ื™ืฆื•ื’ ืคืฉื•ื˜ ื”ืžืจืื” ืืช ืžื‘ื ื” ื”ืคืจื•ื˜ื•ืงื•ืœ. ื‘ืžื”ืœืš ื”ืคื™ืชื•ื—, ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ื“ืจื•ืฉื” ืžืชื•ื•ืกืคืช ืœืžื‘ื ื” ืฉืœื•.

ื‘ื—ืœืง ื”ืฉื ื™ ืื“ื‘ืจ ืขืœ ืžื‘ื ื™ ื ืชื•ื ื™ื ืœื‘ืœื•ืงื™ื ื•ื˜ืจื ื–ืงืฆื™ื•ืช, ื‘-3 ืขืœ ืฉืจืช WebSocket ืœื—ื™ื‘ื•ืจ ืž-JavaScript, ื‘-4 ืืกืชื›ืœ ืขืœ ืžืชื–ืžืŸ ื”ืกื ื›ืจื•ืŸ, ื•ืื– ืžื›ื•ื ืช ืžื—ืกื ื™ืช ืฉืžืขื‘ื“ืช ืงื•ื“ ื‘ืชื™ื ืžื›ื ื™ืกื•ืช ื•ื™ืฆื™ืื•ืช, ืงืจื™ืคื˜ื•ื’ืจืคื™ื” ื• ื‘ืจื™ื›ื•ืช ืœืชืคื•ืงื•ืช.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”