เจ—เฉ‹ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ‰เจฆเจฏเฉ‹เจ— เจฒเจˆ เจฌเจฒเจพเจ•เจšเฉˆเจจ เจตเจฟเจ•เจพเจธเฅค เจญเจพเจ— 1

เจนเฉเจฃ เจฎเฉˆเจ‚ เจšเจพเจฐ เจฎเจนเฉ€เจจเจฟเจ†เจ‚ เจคเฉ‹เจ‚ "เจฌเจฒเจพเจ•เจšเฉ‡เจจ 'เจคเฉ‡ เจ†เจงเจพเจฐเจฟเจค เจธเจฐเจ•เจพเจฐเฉ€ เจ…เจคเฉ‡ เจ‰เจฆเจฏเฉ‹เจ—เจฟเจ• เจ–เฉ‡เจคเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจกเจพเจŸเจพ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจ…เจคเฉ‡ เจชเฉเจฐเจฌเฉฐเจงเจจ เจธเจพเจงเจจเจพเจ‚ เจฆเจพ เจตเจฟเจ•เจพเจธ" เจจเจพเจฎเจ• เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐ เจฐเจฟเจนเจพ เจนเจพเจ‚เฅค
เจนเฉเจฃ เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจน เจฆเฉฑเจธเจฃเจพ เจšเจพเจนเจพเจ‚เจ—เจพ เจ•เจฟ เจฎเฉˆเจ‚ เจ‡เจธ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเจพ, เจ…เจคเฉ‡ เจนเฉเจฃ เจฎเฉˆเจ‚ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจฆเฉ‡ เจ•เฉ‹เจก เจฆเจพ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจตเจฐเจฃเจจ เจ•เจฐเจพเจ‚เจ—เจพเฅค

เจ—เฉ‹ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ‰เจฆเจฏเฉ‹เจ— เจฒเจˆ เจฌเจฒเจพเจ•เจšเฉˆเจจ เจตเจฟเจ•เจพเจธเฅค เจญเจพเจ— 1

เจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ€ เจฒเฉœเฉ€ เจตเจฟเฉฑเจš เจ‡เจน เจชเจนเจฟเจฒเจพ เจฒเฉ‡เจ– เจนเฉˆเฅค เจ‡เฉฑเจฅเฉ‡ เจฎเฉˆเจ‚ เจธเจฐเจตเจฐ เจ…เจคเฉ‡ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจฆเจพ เจนเจพเจ‚. เจตเจพเจธเจคเจต เจตเจฟเฉฑเจš, เจชเจพเจ เจ• เจ‡เจนเจจเจพเจ‚ เจฌเจฒเจพเจ•เจšเฉˆเจจ เจคเฉฑเจคเจพเจ‚ เจฆเฉ‡ เจ†เจชเจฃเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃ เจตเฉ€ เจฒเจฟเจ– เจธเจ•เจฆเจพ เจนเฉˆ.

เจ…เจคเฉ‡ เจ‡เฉฑเจฅเฉ‡ เจฆเฉ‚เจœเจพ เจญเจพเจ— เจนเฉˆ โ€” เจฌเจฒเจพเจ•เจšเฉˆเจจ เจ…เจคเฉ‡ เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ เจกเฉ‡เจŸเจพ เจธเจŸเฉเจฐเจ•เจšเจฐ เจฌเจพเจฐเฉ‡, เจจเจพเจฒ เจนเฉ€ เจ‰เจธ เจชเฉˆเจ•เฉ‡เจœ เจฌเจพเจฐเฉ‡ เจœเฉ‹ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเจพเจฒ เจชเจฐเจธเจชเจฐ เจชเฉเจฐเจญเจพเจต เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจชเจฟเจ›เจฒเฉ‡ เจธเจพเจฒ, เจกเจฟเจœเฉ€เจŸเจฒ เจฌเฉเจฐเฉ‡เจ•เจฅเจฐเฉ‚ เจนเฉˆเจ•เจพเจฅเจจ เจตเจฟเฉฑเจš, เจ‰เจนเจจเจพเจ‚ เจจเฉ‡ เจกเจฟเจธเจŸเฉเจฐเฉ€เจฌเจฟเจŠเจŸเจก เจฒเฉ‡เจœเจผเจฐ เจคเจ•เจจเจพเจฒเฉ‹เจœเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ‰เจฆเจฏเฉ‹เจ— เจ…เจคเฉ‡ เจกเจฟเจœเฉ€เจŸเจฒ เจ…เจฐเจฅเจตเจฟเจตเจธเจฅเจพ เจฒเจˆ เจ‡เฉฑเจ• เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจชเฉเจฐเจฃเจพเจฒเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฑเจ• เจตเจฟเจšเจพเจฐ เจฒเจฟเจ†เจ‡เจ†; เจ‡เจจเฉ‹เจตเฉ‡เจธเจผเจจ เจ…เจธเจฟเจธเจŸเฉˆเจ‚เจธ เจซเฉฐเจก เจฆเฉเจ†เจฐเจพ เจตเจฟเจ•เจพเจธ เจฒเจˆ เจ‡เฉฑเจ• เจ—เฉเจฐเจพเจ‚เจŸ เจตเฉ€ เจœเจพเจฐเฉ€ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเฉ€ (เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเจพ เจฒเจฟเจ–เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจ—เฉเจฐเจพเจ‚เจŸ เจฌเจพเจฐเฉ‡ เจฒเฉ‡เจ–, เจ‰เจนเจจเจพเจ‚ เจฒเจˆ เจœเฉ‹ เจนเฉเจฃเฉ‡ เจนเฉ€ เจธเจŸเจพเจฐเจŸเจ…เฉฑเจช เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจฐเจนเฉ‡ เจนเจจ ), เจ…เจคเฉ‡ เจนเฉเจฃ เจ•เฉเจฐเจฎ เจตเจฟเฉฑเจšเฅค

เจตเจฟเจ•เจพเจธ เจ—เฉ‹ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจš เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจœเจฟเจธ เจตเจฟเฉฑเจš เจฌเจฒเจพเจ• เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ LevelDB เจนเฉˆเฅค
เจฎเฉเฉฑเจ– เจนเจฟเฉฑเจธเฉ‡ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจนเจจ, เจธเจฐเจตเจฐ (เจœเฉ‹ TCP เจ…เจคเฉ‡ WebSocket เจšเจฒเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ - เจฌเจฒเจพเจ•เจšเฉˆเจจ เจจเฉ‚เฉฐ เจธเจฎเจ•เจพเจฒเฉ€ เจ•เจฐเจจ เจฒเจˆ เจชเจนเจฟเจฒเจพ, เจฆเฉ‚เจธเจฐเจพ เจ—เจพเจนเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฒเจˆ, เจœเจพเจตเจพ เจธเจ•เฉเจฐเจฟเจชเจŸ เจคเฉ‹เจ‚ เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจเจพเจ‚ เจ…เจคเฉ‡ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจญเฉ‡เจœเจฃ เจฒเจˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆเฅค

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจœเจผเจฟเจ•เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจ‡เจธ เจฌเจฒเจพเจ•เจšเฉˆเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจฎเฉเฉฑเจ– เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจชเจฒเจพเจ‡เจฐเจพเจ‚ เจ…เจคเฉ‡ เจ—เจพเจนเจ•เจพเจ‚, เจœเจพเจ‚ เจ‡เฉฑเจ• เจตเจฟเจ…เจ•เจคเฉ€ เจตเจฟเฉฑเจš เจฆเฉ‹เจตเจพเจ‚ เจตเจฟเจšเจ•เจพเจฐ เจ‰เจคเจชเจพเจฆเจพเจ‚ เจฆเฉ‡ เจ†เจฆเจพเจจ-เจชเฉเจฐเจฆเจพเจจ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจพเจฒเจค เจ…เจคเฉ‡ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจฒเจˆ เจนเฉˆเฅค เจ‡เจน เจฒเฉ‹เจ• เจ‡เจ•-เจฆเฉ‚เจœเฉ‡ 'เจคเฉ‡ เจญเจฐเฉ‹เจธเจพ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจˆ เจ•เจพเจนเจฒเฉ€ เจตเจฟเจš เจจเจนเฉ€เจ‚ เจนเจจเฅค เจชเจฐ เจ•เฉฐเจฎ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจฌเจฟเจฒเจŸ-เจ‡เจจ เจ•เฉˆเจฒเจ•เฉเจฒเฉ‡เจŸเจฐ เจจเจพเจฒ "เจšเฉˆเฉฑเจ•เจฌเฉเฉฑเจ•" เจฌเจฃเจพเจ‰เจฃเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจชเจฐ เจ‡เฉฑเจ• เจธเจฟเจธเจŸเจฎ เจœเฉ‹ เจ‰เจคเจชเจพเจฆ เจฆเฉ‡ เจœเฉ€เจตเจจ เจšเฉฑเจ•เจฐ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจชเฉˆเจฆเจพ เจนเฉ‹เจฃ เจตเจพเจฒเฉ‡ เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจฐเฉเจŸเฉ€เจจ เจ•เฉฐเจฎเจพเจ‚ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจพเจฒเจค เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฌเจพเจˆเจŸเจ•เฉ‹เจก เจœเฉ‹ เจ‡เจธ เจฎเจพเจฎเจฒเฉ‡ เจฒเจˆ เจœเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฌเจฒเจพเจ•เจšเฉˆเจจ เจฆเฉ‡ เจจเจพเจฒ เจฐเจฟเจตเจพเจœ เจนเฉˆ, เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจฆเฉ‡ เจ‡เจจเจชเฉเจŸเจธ เจ…เจคเฉ‡ เจ†เจ‰เจŸเจชเฉเฉฑเจŸเจพเจ‚ เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ (เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจ–เฉเจฆ เจฌเจฒเจพเจ•เจพเจ‚ เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจฒเฉˆเจตเจฒเจกเฉ€เจฌเฉ€ เจตเจฟเฉฑเจš เจฌเจฒเจพเจ• GOB เจซเจพเจฐเจฎเฉˆเจŸ เจตเจฟเฉฑเจš เจชเฉเจฐเฉ€-เจเจจเจ•เฉ‹เจก เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ)เฅค เจชเจนเจฟเจฒเจพเจ‚, เจ†เจ“ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจ…เจคเฉ‡ เจธเจฐเจตเจฐ (เจ‰เจฐเจซเจผ เจจเฉ‹เจก) เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเฉ€เจเฅค

เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ‡เจธเจฆเจพ เจชเฉ‚เจฐเจพ เจฌเจฟเฉฐเจฆเฉ‚ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจฆเฉ‡ เจœเจตเจพเจฌ เจตเจฟเฉฑเจš เจ•เฉเจ เจกเฉ‡เจŸเจพ เจฒเฉ‹เจก เจ•เจฐเจจ เจฆเฉ‡ เจฎเฉ‹เจก เจตเจฟเฉฑเจš เจธเจตเจฟเจš เจ•เจฐเจจเจพ เจนเฉˆ, เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจฌเจฒเจพเจ• เจœเจพเจ‚ เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ, เจ…เจคเฉ‡ เจ‡เจน เจตเจธเจคเฉ‚เจ†เจ‚ เจฆเจพ เจ†เจฆเจพเจจ-เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฒเจˆ เจตเฉ€ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจœเฉ‹ เจจเฉ‹เจก เจœเจพเจฃ เจธเจ•เฉ‡ เจ•เจฟ เจ‡เจน เจ•เฉŒเจฃ เจนเฉˆเฅค เจจเจพเจฒ เจœเฉเฉœเจฟเจ† เจนเฉ‹เจ‡เจ† เจนเฉˆ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเจพ เจ•เจพเจฐเฉ‹เจฌเจพเจฐ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเจพ เจนเฉˆ (เจธเจฟเฉฐเจ•เจฐเฉ‹เจจเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจธเฉˆเจธเจผเจจ เจฒเจˆ เจ•เจจเฉˆเจ•เจŸ เจ•เฉ€เจคเฉ‡ เจจเฉ‹เจกเจธ เจจเฉ‚เฉฐ "เจจเฉ‡เจฌเจฐเจฟเฉฐเจ—" เจตเฉ€ เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจนเจจเจพเจ‚ เจฆเจพ IP เจœเจพเจฃเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเจพ เจธเจŸเฉ‡เจŸ เจกเฉ‡เจŸเจพ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ)เฅค

เจซเฉ‹เจฒเจกเจฐ (เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€เจ†เจ‚ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉ€เจจเจ•เจธ เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจจ) เจจเฉ‚เฉฐ เจ—เฉ‹ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฐ เจฆเฉ€ เจธเจฎเจ เจตเจฟเฉฑเจš เจชเฉˆเจ•เฉ‡เจœ เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจ‡เจธ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจฆเฉ‡ เจ—เฉ‹ เจ•เฉ‹เจก เจตเจพเจฒเฉ€ เจนเจฐเฉ‡เจ• เจซเจพเจˆเจฒ เจฆเฉ‡ เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš เจ‰เจน เจชเฉˆเจ•เฉ‡เจœ เจซเฉ‹เจฒเจกเจฐ_เจจเจพเจฎ_where_this_file เจธเจฅเจฟเจค เจนเฉˆ เจฒเจฟเจ–เจฆเฉ‡ เจนเจจเฅค เจจเจนเฉ€เจ‚ เจคเจพเจ‚, เจคเฉเจธเฉ€เจ‚ เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจจเฉ‚เฉฐ เจชเฉˆเจ•เฉ‡เจœ เจซเฉ€เจก เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‹เจ—เฉ‡. เจ–เฉˆเจฐ, เจ‡เจน เจ‰เจจเฉเจนเจพเจ‚ เจฒเจˆ เจ•เฉ‹เจˆ เจฐเจพเจœเจผ เจจเจนเฉ€เจ‚ เจนเฉˆ เจœเฉ‹ เจ‡เจธ เจญเจพเจธเจผเจพ เจจเฉ‚เฉฐ เจœเจพเจฃเจฆเฉ‡ เจนเจจ. เจ‡เจน เจชเฉˆเจ•เฉ‡เจœ เจนเจจ:

  • เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจธเฉฐเจšเจพเจฐ (เจธเจฐเจตเจฐ, เจ•เจฒเจพเจ‡เฉฐเจŸ, เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ)
  • เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเฉ‡ เจ…เจคเฉ‡ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจขเจพเจ‚เจšเฉ‡ (เจฌเจฒเจพเจ•, เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ)
  • เจกเจพเจŸเจพเจฌเฉ‡เจธ (เจฌเจฒเจพเจ•เจšเฉˆเจจ)
  • เจธเจนเจฟเจฎเจคเฉ€
  • เจธเจŸเฉˆเจ•เจก เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ (xvm)
  • เจธเจนเจพเจ‡เจ• (เจ•เฉเจฐเจฟเจชเจŸเฉ‹, เจ•เจฟเจธเจฎเจพเจ‚) เจฌเฉฑเจธ เจนเฉเจฃเฉ‡ เจนเฉ€ เจนเฉˆเฅค

เจ‡เฉฑเจฅเฉ‡ github เจฆเจพ เจฒเจฟเฉฐเจ• เจนเฉˆ

เจ‡เจน เจ‡เฉฑเจ• เจตเจฟเจฆเจฟเจ…เจ• เจธเฉฐเจธเจ•เจฐเจฃ เจนเฉˆ, เจ‡เจธ เจตเจฟเฉฑเจš เจ…เฉฐเจคเจฐ-เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจชเจฐเจธเจชเจฐ เจชเฉเจฐเจญเจพเจต เจ…เจคเฉ‡ เจ•เจˆ เจชเฉเจฐเจฏเฉ‹เจ—เจพเจคเจฎเจ• เจญเจพเจ—เจพเจ‚ เจฆเฉ€ เจ˜เจพเจŸ เจนเฉˆ, เจชเจฐ เจขเจพเจ‚เจšเจพ เจ‰เจธ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจนเฉˆ เจœเจฟเจธ 'เจคเฉ‡ เจตเจฟเจ•เจพเจธ เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆเฅค เจœเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจธเฉเจเจพเจ… เจฆเฉ‡เจฃ เจฒเจˆ เจ•เฉเจ เจนเฉˆ, เจคเจพเจ‚ เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจตเจฟเจ•เจพเจธ เจตเจฟเฉฑเจš เจงเจฟเจ†เจจ เจตเจฟเฉฑเจš เจฐเฉฑเจ– เจ•เฉ‡ เจ–เฉเจธเจผ เจนเฉ‹เจตเจพเจ‚เจ—เจพ. เจ…เจคเฉ‡ เจนเฉเจฃ เจธเจฐเจตเจฐ เจฆเฉ€ เจตเจฟเจ†เจ–เจฟเจ† เจฒเจˆ เจ…เจคเฉ‡ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ.

เจ†เจ“ เจชเจนเจฟเจฒเจพเจ‚ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจตเฉ‡เจ–เฉ€เจ.

เจธเจฐเจตเจฐ เจธเจฌเจฐเฉ‚เจŸเฉ€เจจ เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพ เจธเจฐเจตเจฐ เจฆเฉ‡ เจคเฉŒเจฐ เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจชเฉˆเจ•เฉ‡เจœ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ TCP เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจฆเฉ‡ เจธเจฟเจ–เจฐ 'เจคเฉ‡ เจšเฉฑเจฒเจฆเจพ เจนเฉˆเฅค

เจฐเฉเจŸเฉ€เจจ เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ‡ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ: เจธเจฐเจตเจฐ, เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ, เจ•เจฟเจธเจฎ. เจชเฉˆเจ•เฉ‡เจœ เจตเจฟเฉฑเจš เจนเฉ€ tcp_server.go เจกเจพเจŸเจพ เจฌเจฃเจคเจฐ เจธเจผเจพเจฎเจฟเจฒ เจนเฉˆ เจธเฉ‡เจตเจพ.

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

เจ‡เจน เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ‡ เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจจเฉ‚เฉฐ เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ:

  • เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจชเฉ‹เจฐเจŸ เจœเจฟเจธ เจฐเจพเจนเฉ€เจ‚ เจกเฉ‡เจŸเจพ เจฆเจพ เจ†เจฆเจพเจจ-เจชเฉเจฐเจฆเจพเจจ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ
  • JSON เจซเจพเจฐเจฎเฉˆเจŸ เจตเจฟเฉฑเจš เจธเจฐเจตเจฐ เจธเฉฐเจฐเฉ‚เจชเจฃ เจซเจผเจพเจˆเจฒ
  • เจกเฉ€เจฌเฉฑเจ— เจฎเฉ‹เจก (เจจเจฟเฉฑเจœเฉ€ เจฌเจฒเจพเจ•เจšเฉˆเจจ) เจตเจฟเฉฑเจš เจšเฉฑเจฒเจฃ เจฒเจˆ เจซเจฒเฉˆเจ— เจ•เจฐเฉ‹

เจคเจฐเฉฑเจ•เฉ€:

  • JSON เจซเจพเจˆเจฒ เจคเฉ‹เจ‚ เจธเฉฐเจฐเจšเจจเจพ เจชเฉœเฉเจนเจฆเจพ เจนเฉˆ
  • เจกเฉ€เจฌเฉฑเจ— เจฎเฉ‹เจก เจซเจฒเฉˆเจ— เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆ: เจœเฉ‡เจ•เจฐ เจ‡เจน เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจคเจพเจ‚ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจธเจผเจกเจฟเจŠเจฒเจฐ เจฒเจพเจ‚เจš เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจฌเจฒเจพเจ•เจšเฉˆเจจ เจฒเฉ‹เจก เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ
  • เจธเฉฐเจฐเจšเจจเจพ เจกเฉ‡เจŸเจพ เจขเจพเจ‚เจšเฉ‡ เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจธเจฐเจตเจฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจเจพ

เจธเจฐเจตเจฐ

  • เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ TCP เจธเจฐเจตเจฐ เจ…เจคเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจ‡เฉฐเจŸเจฐเฉˆเจ•เจธเจผเจจ เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจฆเจพ เจนเฉˆเฅค
  • เจ‡เจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจฐเจตเจต เจกเฉ‡เจŸเจพ เจขเจพเจ‚เจšเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจชเฉ‹เจฐเจŸ เจจเฉฐเจฌเจฐ, เจ‡เฉฑเจ• เจฌเจซเจฐ เจ†เจ•เจพเจฐ เจ…เจคเฉ‡ เจขเจพเจ‚เจšเฉ‡ เจฒเจˆ เจ‡เฉฑเจ• เจชเฉเจ†เจ‡เฉฐเจŸเจฐ เจธเจผเจพเจฎเจฒ เจนเฉˆ เจ•เจฟเจธเจฎเจพเจ‚เฅค เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚
  • เจฐเจจ เจตเจฟเจงเฉ€ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจ‡เฉฐเจŸเจฐเจเจ•เจธเจผเจจ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเฉ€ เจนเฉˆ (เจ•เจฟเจธเฉ‡ เจฆเจฟเฉฑเจคเฉ‡ เจชเฉ‹เจฐเจŸ 'เจคเฉ‡ เจ†เจ‰เจฃ เจตเจพเจฒเฉ‡ เจ•เจจเฉˆเจ•เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉเจฃเจจเจพ, เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจ•เจจเฉˆเจ•เจธเจผเจจ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ‡เจธเจฆเฉ€ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจจเจตเฉ‡เจ‚ เจฅเฉเจฐเฉˆเจก เจตเจฟเฉฑเจš เจชเฉเจฐเจพเจˆเจตเฉ‡เจŸ เจนเฉˆเจ‚เจกเจฒ เจตเจฟเจงเฉ€ เจตเจฟเฉฑเจš เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ)
  • ะ’ เจนเฉˆเจ‚เจกเจฒ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฌเจซเจฐ เจตเจฟเฉฑเจš เจชเฉœเฉเจนเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ‡เฉฑเจ• เจธเจŸเฉเจฐเจฟเฉฐเจ— เจชเฉเจฐเจคเฉ€เจจเจฟเจงเจคเจพ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจชเจพเจธ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ protocol.Choice
  • protocol.Choice เจตเจพเจชเจธเฉ€ เจ‡เจธ เจฆเจพ เจจเจคเฉ€เจœเจพ เจœเจพเจ‚ เจ‡เฉฑเจ• เจ—เจฒเจคเฉ€ เจฆเจพ เจ•เจพเจฐเจจ เจฌเจฃเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจฆเจพ เจจเจคเฉ€เจœเจพ เจซเจฟเจฐ เจตเจฟเฉฑเจš เจคเจฌเจฆเฉ€เจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ protocol.Interpreteเจœเฉ‹ เจตเจพเจชเจธ เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆ intrpr - เจ•เจฟเจธเจฎ เจฆเฉ€ เจตเจธเจคเฉ‚ เจตเจฟเจ†เจ–เจฟเจ† เจกเฉ‡เจŸเจพ, เจœเจพเจ‚ เจšเฉ‹เจฃ เจจเจคเฉ€เจœเฉ‡ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจคเจฐเฉเฉฑเจŸเฉ€ เจฆเจพ เจ•เจพเจฐเจจ เจฌเจฃเจฆเฉ€ เจนเฉˆ
  • เจซเจฟเจฐ เจธเจตเจฟเฉฑเจš เจšเจฒเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ intrpr.commands[0] เจœเฉ‹ เจ‡เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆ: เจจเจคเฉ€เจœเจพ, inv, เจ—เจฒเจคเฉ€ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจญเจพเจ— เจนเฉˆ เจฎเฉ‚เจฒ
  • เจญเจพเจ— เจตเจฟเฉฑเจš เจ‡เจธ เจฆเจพ เจจเจคเฉ€เจœเจพ เจธเจตเจฟเฉฑเจš เจฎเฉเฉฑเจฒ เจฆเฉเจ†เจฐเจพ เจชเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ 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.เจธเจฐเฉ€เจฐ เจ‡เฉฑเจ• เจธเฉฐเจ–เจฟเจ†เจคเจฎเจ• เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฒเจˆ 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"))

เจธเจฐเจตเจฐ เจชเฉˆเจ•เฉ‡เจœ เจคเฉ‹เจ‚ เจตเจฟเจงเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจชเฉˆเจ•เฉ‡เจœ เจคเฉ‹เจ‚ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจฒเจˆ เจธเฉฐเจฐเจšเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ.

เจชเจฐเฉ‹เจŸเฉ‹เจ•เจพเจฒ

เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจธเจพเจงเจจ เจตเจœเฉ‹เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจจเฉˆเจŸเจตเจฐเจ• เจเจ•เจธเจšเฉ‡เจ‚เจœ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค

เจšเฉ‹เจฃ(str เจธเจคเจฐ) (เจธเจŸเจฐเจฟเฉฐเจ—, เจคเจฐเฉเฉฑเจŸเฉ€) เจธเจฐเจตเจฐ เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจพเจ‡เจฎเจฐเฉ€ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจ•เจฐเจฆเจพ เจนเฉˆ, เจ‡เจจเจชเฉเจŸ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจฆเฉ€ เจ‡เฉฑเจ• เจธเจŸเฉเจฐเจฟเฉฐเจ— เจชเฉเจฐเจคเฉ€เจจเจฟเจงเจคเจพ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€ เจ‡เฉฑเจ• เจธเจคเจฐ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆ เจฆเฉเจญเจพเจธเจผเฉ€เจ:

  • เจ‡เจจเจชเฉเจŸ เจธเจคเจฐ เจจเฉ‚เฉฐ เจธเจฟเจฐ เจ…เจคเฉ‡ เจธเจฐเฉ€เจฐ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ ReqParseN2(str)
  • เจธเจฟเจฐ เจจเฉ‚เฉฐ เจคเฉฑเจคเจพเจ‚ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ ReqParseHead (เจธเจฟเจฐ) เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจฆเฉ‡ เจŸเฉเจ•เฉœเฉ‡ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค
  • ะ’ เจธเจตเจฟเฉฑเจš(เจ•เจฎเจพเจ‚เจก[0]) เจชเฉเจฐเจพเจชเจค เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเฉ‹ (cmd, เจ•เฉเฉฐเจœเฉ€, เจชเจคเจพ เจœเจพเจ‚ เจธเฉˆเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจšเจพเจฒเฉ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ เจฎเฉ‚เจฒ)
  • cmd เจตเจฟเฉฑเจš 2 เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ เจธเจตเจฟเฉฑเจš(เจ•เจฎเจพเจ‚เจกเจธ[1]) โ€” เจฒเฉฐเจฌเจพเจˆ ะธ getversion.
  • เจฒเฉฐเจฌเจพเจˆ เจตเจฟเฉฑเจš เจกเจพเจŸเจพ เจ•เจฟเจธเจฎ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆ เจนเฉเจ•เจฎ[2] เจ…เจคเฉ‡ เจ‡เจธ เจจเฉ‚เฉฐ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เจฐเจฆเจพ เจนเฉˆ เจกเฉˆเจŸเจพ เจŸเจพเจˆเจช
  • เจ‡เจธเจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆ เจธเจฐเฉ€เจฐ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจธเจคเจฐ เจฎเฉเฉฑเจฒ เจธเจผเจพเจฎเจฟเจฒ เจนเฉˆ
    len(body) < 1
  • เจœเจตเจพเจฌ เจธเจคเจฐ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆ:
    "result:bufferlength:" + datatype + "/" + body
  • getversion เจ‡เฉฑเจ• เจธเจคเจฐ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆ
    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)

เจ‡เฉฑเจ• เจธเจคเจฐ เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐเจฆเจพ เจนเฉˆ เจ‡เจธ เจฆเจพ เจจเจคเฉ€เจœเจพ เจ…เจคเฉ‡ เจตเจธเจคเฉ‚ เจฆเจพ เจนเจตเจพเจฒเจพ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจ…เจคเฉ‡ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆ เจตเจฟเจ†เจ–เจฟเจ† เจกเฉ‡เจŸเจพ.

เจคเจฐเฉฑเจ•เฉ€:

  • เจ‡เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจšเฉ‹เจฃ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจธเจฟเจฐ เจ…เจคเฉ‡ เจธเจฐเฉ€เจฐ เจจเฉ‚เฉฐ เจ•เฉฑเจขเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ 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]))
  • เจœเฉ‡เจ•เจฐ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡ เจชเฉ‡เจฒเฉ‹เจก เจซเจฟเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจชเจพเจธ เจ•เจฐเจฆเจพ เจนเฉˆ
    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 เจตเจฟเฉฑเจš JavaScript เจคเฉ‹เจ‚ เจœเฉเฉœเจจ เจฒเจˆ WebSocket เจธเจฐเจตเจฐ เจฌเจพเจฐเฉ‡, 4 เจตเจฟเฉฑเจš เจฎเฉˆเจ‚ เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจธเจผเจกเจฟเจŠเจฒเจฐ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจพเจ‚เจ—เจพ, เจซเจฟเจฐ เจ‡เฉฑเจ• เจธเจŸเฉˆเจ• เจฎเจธเจผเฉ€เจจ เจœเฉ‹ เจ‡เจจเจชเฉเจŸเจธ เจ…เจคเฉ‡ เจ†เจ‰เจŸเจชเฉเฉฑเจŸเจพเจ‚ เจคเฉ‹เจ‚ เจฌเจพเจˆเจŸเจ•เฉ‹เจก เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจฆเฉ€ เจนเฉˆ, เจ•เฉเจฐเจฟเจชเจŸเฉ‹เจ—เฉเจฐเจพเจซเฉ€ เจ…เจคเฉ‡ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจฒเจˆ เจชเฉ‚เจฒ.

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹