ื‘ืœืึธืงื˜ืฉื™ื™ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคึฟืึทืจ ืื™ื ื“ื•ืกื˜ืจื™ืข ื ื™ืฆืŸ Go. ื˜ื™ื™ืœ 1

ืคึฟืึทืจ ืคื™ืจ ื—ื“ืฉื™ื ืื™ืฆื˜ ืื™ืš ื”ืึธื‘ืŸ ืืจื‘ืขื˜ืŸ ืื•ื™ืฃ ืึท ืคึผืจื•ื™ืขืงื˜ ื’ืขืจื•ืคืŸ "ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ื“ืึทื˜ืŸ ืฉื•ืฅ ืื•ืŸ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ืžื›ืฉื™ืจื™ื ืื™ืŸ ืจืขื’ื™ืจื•ื ื’ ืื•ืŸ ื™ื ื“ืึทืกื˜ืจื™ ืกืขืงื˜ืึธืจืก ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื‘ืœืึทืงื›ื™ื™ื•ื•ืึทืŸ."
ืื™ืฆื˜ ืื™ืš ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ื“ืขืจืฆื™ื™ืœืŸ ืื™ืจ ื•ื•ืขื’ืŸ ื•ื•ื™ ืื™ืš ืกื˜ืึทืจื˜ืขื“ ื“ืขื ืคึผืจื•ื™ืขืงื˜, ืื•ืŸ ืื™ืฆื˜ ืื™ืš ื•ื•ืขืœ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื“ื™ ืคึผืจืึธื’ืจืึทื ืงืึธื“ ืื™ืŸ ื“ืขื˜ืึทืœ.

ื‘ืœืึธืงื˜ืฉื™ื™ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคึฟืึทืจ ืื™ื ื“ื•ืกื˜ืจื™ืข ื ื™ืฆืŸ Go. ื˜ื™ื™ืœ 1

ื“ืึธืก ืื™ื– ื“ืขืจ ืขืจืฉื˜ืขืจ ืึทืจื˜ื™ืงืœ ืื™ืŸ ืึท ืกืขืจื™ืข ืคื•ืŸ โ€‹โ€‹ืึทืจื˜ื™ืงืœืขืŸ. ื“ืึธ ืื™ืš ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื“ื™ ืกืขืจื•ื•ืขืจ ืื•ืŸ ืคึผืจืึธื˜ืึธืงืึธืœ. ืื™ืŸ ืคืึทืงื˜, ื“ื™ ืœื™ื™ืขื ืขืจ ืงืขื ืขืŸ ืืคื™ืœื• ืฉืจื™ื™ึทื‘ืŸ ื–ื™ื™ืŸ ืื™ื™ื’ืขื ืข ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื“ื™ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ ืขืœืขืžืขื ื˜ืŸ.

ืื•ืŸ ื“ืึธ ืื™ื– ื“ืขืจ ืฆื•ื•ื™ื™ื˜ืขืจ ื˜ื™ื™ืœ - ื•ื•ืขื’ืŸ ื‘ืœืึทืงื›ื™ื™ื•ื•ืึทืŸ ืื•ืŸ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ื“ืึทื˜ืŸ ืกื˜ืจืึทืงื˜ืฉืขืจื–, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื•ื•ืขื’ืŸ ื“ืขื ืคึผืขืงืœ ื•ื•ืึธืก ื™ืžืคึผืœืึทืžืึทื ืฅ ื™ื ื˜ืขืจืึทืงืฉืึทืŸ ืžื™ื˜ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก.

ืœืขืฆื˜ืข ื™ืึธืจ, ื‘ื™ื™ ื“ื™ ื“ื™ื’ื™ื˜ืึทืœ ื‘ืจื™ื™ืงื˜ืจื• ื›ืึทืงืึทื˜ื”ืึธืŸ, ื–ื™ื™ ื”ืึธื‘ืŸ ืึท ื’ืขื“ืึทื ืง ืฆื• ืžืึทื›ืŸ ืึท ื ื•ืฆื™ืง ืกื™ืกื˜ืขื ืคึฟืึทืจ ื™ื ื“ืึทืกื˜ืจื™ ืื•ืŸ ื“ื™ ื“ื™ื’ื™ื˜ืึทืœ ืขืงืื ืืžื™ืข ืžื™ื˜ ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืœืขื“ื–ืฉืขืจ ื˜ืขื›ื ืึธืœืึธื’ื™ืข; ืึท ืฉืขื ืงืขืŸ ืื™ื– ืื•ื™ืš ืืจื•ื™ืก ืคึฟืึทืจ ื“ืขืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ื“ื•ืจืš ื“ื™ ื™ื ื ืึธื•ื•ืึทื˜ื™ืึธืŸ ื”ื™ืœืฃ ืคืึทื ื“ (ืื™ืš ื–ืึธืœ ืฉืจื™ื™ึทื‘ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืึทืจื˜ื™ืงืœ ื•ื•ืขื’ืŸ ื“ื™ ืฉืขื ืงืขืŸ, ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื–ืขื ืขืŸ ื ืึธืจ ืกื˜ืึทืจื˜ื™ื ื’ ืกื˜ืึทืจื˜ืึทืคึผืก), ืื•ืŸ ืื™ืฆื˜ ืื™ืŸ ืกื“ืจ.

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ื ืขืžื˜ ืึธืจื˜ ืื™ืŸ ื“ื™ Go ืฉืคึผืจืึทืš, ืื•ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ืŸ ื•ื•ืึธืก ื“ื™ ื‘ืœืึทืงืก ื–ืขื ืขืŸ ืกื˜ืึธืจื“ ืื™ื– LevelDB.
ื“ื™ ื”ื•ื™ืคึผื˜ ืคึผืึทืจืฅ ื–ืขื ืขืŸ ื“ื™ ืคึผืจืึธื˜ืึธืงืึธืœ, ื“ื™ ืกืขืจื•ื•ืขืจ (ื•ื•ืึธืก ืœื•ื™ืคื˜ TCP ืื•ืŸ WebSocket - ื“ืขืจ ืขืจืฉื˜ืขืจ ืคึฟืึทืจ ืกื™ื ื’ืงืจืึทื ื™ื™ื–ื™ื ื’ ื“ื™ ื‘ืœืึทืงื›ื™ื™ื•ื•ืึทืŸ, ื“ื™ ืจื’ืข ืคึฟืึทืจ ืงืึทื ืขืงื˜ื™ื ื’ ืงืœื™ื™ืึทื ืฅ, ืฉื™ืงืŸ ื˜ืจืึทื ื–ืึทืงืฉืึทื ื– ืื•ืŸ ืงืึทืžืึทื ื“ื– ืคึฟื•ืŸ ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ.

ื•ื•ื™ ื“ืขืจืžืื ื˜, ื“ืขื ื‘ืœืึธืงื˜ืฉื™ื™ืŸ ืื™ื– ื‘ืคึฟืจื˜ ื“ืืจืฃ ืฆื• ืึธื˜ืึทืžื™ื™ื˜ ืื•ืŸ ื‘ืึทืฉื™ืฆืŸ ื“ื™ ื•ื•ืขืงืกืœ ืคื•ืŸ ืคึผืจืึธื“ื•ืงื˜ืŸ ืฆื•ื•ื™ืฉืŸ ืกืึทืคึผืœื™ื™ืขืจื– ืื•ืŸ ืงืึทืกื˜ืึทืžืขืจื–, ืึธื“ืขืจ ื‘ื™ื™ื“ืข ืื™ืŸ ืื™ื™ืŸ ืžืขื ื˜ืฉ. ื“ื™ ืžืขื ื˜ืฉืŸ ื–ืขื ืขืŸ ืื™ืŸ ืงื™ื™ืŸ ื™ื™ึทืœืŸ ืฆื• ืฆื•ื˜ืจื•ื™ ื™ืขื“ืขืจ ืื ื“ืขืจืขืจ. ืึธื‘ืขืจ ื“ื™ ืึทืจื‘ืขื˜ ืื™ื– ื ื™ืฉื˜ ื‘ืœื•ื™ื– ืฆื• ืฉืึทืคึฟืŸ ืึท "ื˜ืฉืขืงื‘ืึธืึธืง" ืžื™ื˜ ืึท ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ืงืึทืœืงื•ืœืึทื˜ืึธืจ, ืึธื‘ืขืจ ืึท ืกื™ืกื˜ืขื ื•ื•ืึธืก ืึธื˜ืึทืžื™ื™ื– ืจื•ื‘ึฟ ืคื•ืŸ ื“ื™ ืจื•ื˜ื™ืŸ ื˜ืึทืกืงืก ื•ื•ืึธืก ืฉื˜ื™ื™ืขืŸ ื•ื•ืขืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ื™ ืคึผืจืึธื“ื•ืงื˜ ืœืขื‘ืŸ ืฆื™ืงืœ. ื“ื™ ื‘ื™ื˜ืขืงืึธื“ืข ื•ื•ืึธืก ืื™ื– ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ื“ืขื ืขื ื™ืŸ, ื•ื•ื™ ืื™ื– ืงืึทืกื˜ืึทืžืขืจื™ ืžื™ื˜ ื‘ืœืึธืงื˜ืฉืึทื™ื ืก, ืื™ื– ืกื˜ืึธืจื“ ืื™ืŸ ื“ื™ ื™ื ืคึผื•ืฅ ืื•ืŸ ืึทื•ื˜ืคึผื•ืฅ ืคื•ืŸ ื˜ืจืึทื ื–ืึทืงืฉืึทื ื– (ื“ื™ ื˜ืจืึทื ื–ืึทืงืฉืึทื ื– ื–ื™ืš ื–ืขื ืขืŸ ืกื˜ืึธืจื“ ืื™ืŸ ื‘ืœืึทืงืก, ื“ื™ ื‘ืœืึทืงืก ืื™ืŸ ืœืขื•ื•ืขืœื“ื‘ ื–ืขื ืขืŸ ืคืึทืจ-ืขื ืงืึธื•ื“ ืื™ืŸ ื“ื™ GOB ืคึฟืึธืจืžืึทื˜). ืขืจืฉื˜ืขืจ, ืœืึธื–ืŸ ืื•ื ื“ื– ืจืขื“ืŸ ื•ื•ืขื’ืŸ ื“ืขื ืคึผืจืึธื˜ืึธืงืึธืœ ืื•ืŸ ื“ื™ ืกืขืจื•ื•ืขืจ (ืึทืงืึท ื ืึธื“ืข).

ื“ืขืจ ืคึผืจืึธื˜ืึธืงืึธืœ ืื™ื– ื ื™ืฉื˜ ืงืึธืžืคึผืœื™ืฆื™ืจื˜, ื“ืขืจ ื’ืื ืฆืขืจ ืคื•ื ื˜ ืื™ื– ืฆื• ื‘ืึทืฉื˜ื™ืžืขืŸ ืฆื• ื“ื™ ืžืึธื“ืข ืคื•ืŸ โ€‹โ€‹ืœืึธื•ื“ื™ื ื’ ืขื˜ืœืขื›ืข ื“ืึทื˜ืŸ, ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืึท ื‘ืœืึธืง ืึธื“ืขืจ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ, ืื™ืŸ ืขื ื˜ืคืขืจ ืฆื• ืึท ืกืคึผืขืฆื™ืขืœ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื”, ืื•ืŸ ืขืก ืื™ื– ืื•ื™ืš ื“ืืจืฃ ืคึฟืึทืจ ื™ืงืกื˜ืฉื™ื™ื ื“ื–ืฉื™ื ื’ ื™ื ื•ื•ืึทื ื˜ืึธืจื™, ืึทื–ื•ื™ ืึทื– ื“ืขืจ ื ืึธื“ืข ื•ื•ื™ื™ืกื˜ ื•ื•ืขืจ ืขืก ืื™ื–. ืื™ื– ืงืึธื ื ืขืงื˜ืขื“ ืฆื• ืื•ืŸ ื•ื•ื™ ื–ื™ื™ ื”ืึธื‘ืŸ ื’ืขืฉืขืคื˜ ืฆื• ื˜ืึธืŸ (ื“ื™ ื ืึธื•ื“ื– ืงืึธื ื ืขืงื˜ืขื“ ืคึฟืึทืจ ื“ื™ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ ืกืขืกื™ืข ื–ืขื ืขืŸ ืื•ื™ืš ื’ืขืจื•ืคืŸ "ืฉื›ื ื•ืช" ื•ื•ื™ื™ึทืœ ื–ื™ื™ืขืจ IP ืื™ื– ื‘ืึทื•ื•ื•ืกื˜ ืื•ืŸ ื–ื™ื™ืขืจ ืฉื˜ืึทื˜ ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ืกื˜ืึธืจื“ ืื™ืŸ ื–ื›ึผืจื•ืŸ).

ืคืึธืœื“ืขืจืก (ื“ื™ืจืขืงื˜ืขืจื™ื– ื•ื•ื™ ืœื™ื ื•ืงืก ืจื•ืคื˜ ื–ื™ื™) ืื™ืŸ ื“ื™ ืคืืจืฉื˜ืื ื“ ืคื•ืŸ Go ืคึผืจืึธื•ื’ืจืึทืžืขืจื– ื–ืขื ืขืŸ ื’ืขืจื•ืคืŸ ืคึผืึทืงืึทื“ื–ืฉืึทื–, ืึทื–ื•ื™ ืื™ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื™ืขื“ืขืจ ื˜ืขืงืข ืžื™ื˜ Go ืงืึธื“ ืคื•ืŸ ื“ืขื ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ื–ื™ื™ ืฉืจื™ื™ึทื‘ืŸ ืคึผืขืงืœ folder_name_where_this_file ืื™ื– ืœื™ื’ืŸ. ืึทื ื“ืขืจืฉ, ืื™ืจ ื•ื•ืขื˜ ื ื™ืฉื˜ ืงืขื ืขืŸ ืฆื• ืงืึธืจืžืขืŸ ื“ืขื ืคึผืขืงืœ ืฆื• ื“ื™ ืงืึทืžืคึผื™ื™ืœืขืจ. ื ื•, ื“ืึธืก ืื™ื– ื ื™ื˜ ืงื™ื™ืŸ ืกื•ื“ ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ืงืขื ืขืŸ ื“ืขื ืฉืคึผืจืึทืš. ื“ืึธืก ื–ืขื ืขืŸ ื“ื™ ืคึผืึทืงืึทื“ื–ืฉืึทื–:

  • ื ืขืฅ ืงืึธืžื•ื ื™ืงืึทืฆื™ืข (ืกืขืจื•ื•ืขืจ, ืงืœื™ืขื ื˜, ืคึผืจืึธื˜ืึธืงืึธืœ)
  • ืกื˜ืจืึทืงื˜ืฉืขืจื– ืคื•ืŸ ืกื˜ืึธืจื“ ืื•ืŸ ื˜ืจืึทื ืกืžื™ื˜ื˜ืขื“ ื“ืึทื˜ืŸ (ื‘ืœืึธืง, ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ)
  • ื“ืึทื˜ืึทื‘ืึทืกืข (ื‘ืœืึธืงื˜ืฉื™ื™ืŸ)
  • ืงืึธื ืกืขื ืกื•ืก
  • ืกื˜ืึทืงื˜ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ (ืงืกื•ื•ื)
  • ืึทื’ื–ื™ืœื™ืขืจื™ (ืงืจื™ืคึผื˜ืึธ, ื˜ื™ื™ืคึผืก) ืึทื– ืก ืึทืœืข ืคึฟืึทืจ ืื™ืฆื˜.

ื“ืึธ ืื™ื– ื“ื™ ืœื™ื ืง ืฆื• ื’ื™ื˜ื”ื•ื‘

ื“ืึธืก ืื™ื– ืึท ื‘ื™ืœื“ื•ื ื’ืงืจื™ื™ื– ื•ื•ืขืจืกื™ืข, ืขืก ืคืขืœืŸ ื™ื ื˜ืขืจ-ืคึผืจืึธืกืขืก ื™ื ื˜ืขืจืึทืงืฉืึทืŸ ืื•ืŸ ืขื˜ืœืขื›ืข ื™ืงืกืคึผืขืจืžืขื ืึทืœ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ, ืึธื‘ืขืจ ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ืงืึธืจืึทืกืคึผืึทื ื“ื– ืฆื• ื“ืขืจ ื•ื•ืึธืก ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜. ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ืขืคึผืขืก ืฆื• ืคึฟืึธืจืฉืœืึธื’ืŸ ืื™ืŸ ื“ื™ ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ, ืื™ืš ื•ื•ืขืœ ื–ื™ื™ืŸ ืฆื•ืคืจื™ื“ืŸ ืฆื• ื ืขืžืขืŸ ืขืก ืื™ืŸ ื—ืฉื‘ื•ืŸ ืื™ืŸ ื•ื•ื™ื™ึทื˜ืขืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’. ืื•ืŸ ืื™ืฆื˜ ืคึฟืึทืจ ืึท ื“ืขืจืงืœืขืจื•ื ื’ ืคื•ืŸ ื“ื™ ืกืขืจื•ื•ืขืจ ืื•ืŸ ืคึผืจืึธื˜ืึธืงืึธืœ.

ื–ืืœ ืก ืงื•ืง ื‘ื™ื™ึท ืกืขืจื•ื•ืขืจ ืขืจืฉื˜ืขืจ.

ื“ื™ ืกืขืจื•ื•ืขืจ ืกื•ื‘ืจื•ื˜ื™ื ืข ืืงื˜ืŸ ื•ื•ื™ ืึท ื“ืึทื˜ืŸ ืกืขืจื•ื•ืขืจ ื•ื•ืึธืก ืœื•ื™ืคื˜ ืื•ื™ืฃ ืฉืคึผื™ืฅ ืคื•ืŸ ื“ื™ TCP ืคึผืจืึธื˜ืึธืงืึธืœ ื ื™ืฆืŸ ื“ืึทื˜ืŸ ืกื˜ืจืึทืงื˜ืฉืขืจื– ืคื•ืŸ ื“ื™ ืคึผืจืึธื˜ืึธืงืึธืœ ืคึผืขืงืœ.

ื“ื™ ืจื•ื˜ื™ืŸ ื ื™ืฆื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ืคึผืึทืงืึทื“ื–ืฉืึทื–: ืฉืœื™ื—, ืคึผืจืึธื˜ืึธืงืึธืœ, ื˜ื™ื™ืคึผืก. ืื™ืŸ ื“ื™ ืคึผืขืงืœ ื–ื™ืš tcp_server.go ื›ึผื•ืœืœ ื“ืึทื˜ืŸ ืกื˜ืจื•ืงื˜ื•ืจ ื“ื™ื ืขืŸ.

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

ืขืก ืงืขื ืขืŸ ืึธื ื ืขืžืขืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืคึผืึทืจืึทืžืขื˜ืขืจืก:

  • ื ืขืฅ ืคึผืึธืจื˜ ื“ื•ืจืš ื•ื•ืึธืก ื“ืึทื˜ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคืืจื‘ื™ื˜ืŸ
  • ืกืขืจื•ื•ื™ืจืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข ืื™ืŸ JSON ืคึฟืึธืจืžืึทื˜
  • ืคืึธืŸ ืคึฟืึทืจ ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ื“ื™ื‘ืึทื’ ืžืึธื“ืข (ืคึผืจื™ื•ื•ืึทื˜ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ)

ืคึผืจืึธื’ืจืขืก:

  • ืœื™ื™ืขื ื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคื•ืŸ JSON ื˜ืขืงืข
  • ื“ื™ ื“ืขื‘ื•ื’ ืžืึธื“ืข ืคืึธืŸ ืื™ื– ืึธืคึผื’ืขืฉื˜ืขืœื˜: ืื•ื™ื‘ ืขืก ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜, ื“ื™ ื ืขืฅ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ ืกืงืขื“ื–ืฉื•ืœืขืจ ืื™ื– ื ื™ืฉื˜ ืœืึธื ื˜ืฉื˜ ืื•ืŸ ื“ื™ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ ืื™ื– ื ื™ืฉื˜ ืœืึธื•ื“ื™ื“
  • ื™ื ื™ื˜ื™ืึทืœื™ื™ื–ื™ื ื’ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื“ืึทื˜ืŸ ืกื˜ืจื•ืงื˜ื•ืจ ืื•ืŸ ืึธื ื”ื™ื™ื‘ ื“ื™ ืกืขืจื•ื•ืขืจ

ืกืขืจื•ื•ื™ืจืขืจ

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

ืคืึทื ื’ืงืฉืึทื ื– 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])
  • ืœื™ื™ืขื ื˜ ื“ื™ ื•ื•ืขืจื˜ ื™ื ื˜ืจืคึผืจ.ื’ื•ืฃ ืฆื• ืึท ื ื•ืžืขืจื™ืง ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง 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"))

ืžืขื˜ื”ืึธื“ืก ืคื•ืŸ ื“ื™ ืกืขืจื•ื•ืขืจ ืคึผืขืงืœ ื–ืขื ืขืŸ ืงืึทื ืคื™ื’ื™ืขืจื“ ืฆื• ืคึผืจืึธืฆืขืก ื‘ืืงื•ืžืขืŸ ื“ืึทื˜ืŸ ื ื™ืฆืŸ ืคืึทื ื’ืงืฉืึทื ื– ืคื•ืŸ ื“ืขื ืคึผืขืงืœ ืคึผืจืึธื˜ืึธืงืึธืœ.

ืคึผืจืึธื˜ืึธืงืึธืœ

ื ืคึผืจืึธื˜ืึธืงืึธืœ ืกืขืจื•ื•ืขืก ื•ื•ื™ ืึท ืžื™ื˜ืœ ื•ื•ืึธืก ืจืขืคึผืจืึทื–ืขื ืฅ ื“ืึทื˜ืŸ ืื™ืŸ ื ืขืฅ ื•ื•ืขืงืกืœ.

ื‘ืจื™ืจื” (ืกื˜ืจ ืฉื˜ืจื™ืงืœ) (ืฉื˜ืจื™ืงืœ, ื˜ืขื•ืช) ืคึผืขืจืคืึธืจืžื– ืขืจืฉื˜ื™ืง ืคึผืจืึทืกืขืกื™ื ื’ ืคื•ืŸ ื“ืึทื˜ืŸ ื‘ืืงื•ืžืขืŸ ื“ื•ืจืš ื“ื™ ืกืขืจื•ื•ืขืจ, ื‘ืืงื•ืžื˜ ืึท ืฉื˜ืจื™ืงืœ ืคืึทืจื˜ืจืขื˜ื•ื ื’ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื•ื•ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืื•ืŸ ืงืขืจื˜ ืึท ืฉื˜ืจื™ืงืœ ืฆื•ื’ืขื’ืจื™ื™ื˜ ืคึฟืึทืจ ืื™ื‘ืขืจื–ืขืฆืขืจ:

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

ืื™ื‘ืขืจื–ืขืฆืขืจ

ื›ึผื•ืœืœ ื“ื™ ื™ื ื˜ืขืจืคึผืจืขื˜ืขื“ืึทื˜ืึท ืกื˜ืจื•ืงื˜ื•ืจ ืื•ืŸ ืคึผืขืจืคืึธืจืžื– ืฆื•ื•ื™ื™ื˜ื™ืง ืคึผืจืึทืกืขืกื™ื ื’ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ืื•ืžื’ืขืงืขืจื˜ ืคึฟื•ืŸ ื‘ืจื™ื™ืจืข ืกื˜ืจื™ื ื’ืก ืื•ืŸ ื›ื™ื™ืคืขืฅ ืคืึธืจืžื™ืจื•ื ื’ ื™ื ื˜ืขืจืคึผืจืขื˜ืขื“ืึทื˜ืึท.

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 ืคึผืขืงืœ ื”ื•ื™ืคึผื˜.

ืงื•ื™ื ืข

ื“ืขืจ ืงืœื™ืขื ื˜ ืคึผืขืงืœ ื›ึผื•ืœืœ ื“ื™ ืคืึทื ื’ืงืฉืึทื ื– 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]))
  • ืื•ื™ื‘ ื˜ืจืึทื ืกืคืขืจื“ payload ื“ืขืžืึธืœื˜ ืคึผืึทืกื™ื– ืขืก ืื•ื™ืฃ
    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 ื•ื•ืขื’ืŸ ื“ื™ ื•ื•ืขื‘ืกืึธืงืงืขื˜ ืกืขืจื•ื•ืขืจ ืคึฟืึทืจ ืงืึทื ืขืงื˜ื™ื ื’ ืคึฟื•ืŸ ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜, ืื™ืŸ 4 ืื™ืš ื•ื•ืขืœ ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ ืกืงืขื“ื–ืฉื•ืœืขืจ, ื“ืขืจื ืึธืš ืึท ืึธื ืœื™ื™ื’ืŸ ืžืึทืฉื™ืŸ ื•ื•ืึธืก ืคึผืจืึทืกืขืกืึทื– ื‘ื™ื˜ืขืงืึธื“ืข ืคึฟื•ืŸ ื™ื ืคึผื•ืฅ ืื•ืŸ ืึทื•ื˜ืคึผื•ืฅ, ืงืจื™ืคึผื˜ืึธื’ืจืึทืคื™ ืื•ืŸ ืคึผืึธืึธืœืก ืคึฟืึทืจ ืึทื•ื˜ืคึผื•ืฅ.

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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’