рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдХреЛ рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ

рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдХреЛ рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ

рдЬреЛ рдХреЛ рд▓рд╛рдЧреА рдЦреЛрдЬреНрдЫ рдиреЗрдЯрд╡рд░реНрдХ рд░ рдкреНрд░реЛрдЯреЛрдХрд▓ рдмреБрдЭреНрди рд╕рдорд░реНрдкрд┐рддред

рд╕рдВрдХреНрд╖рд┐рдкреНрдд

рд▓реЗрдЦрд▓реЗ рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдорд┐рд╢рдирдХреЛ рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ рдЫрд▓рдлрд▓ рдЧрд░реНрджрдЫ, рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫ Go, UDP рд░ TCP рд╕рд╣рд┐рддред рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдкрдЯрдХ, ╨┤╨▓╨░, рддреАрди рд░ рдкреБрд╕реНрддрдХрд╣рд░реВ "рдХрдореНрдкреНрдпреБрдЯрд░ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВред рд╢реАрд░реНрд╖-рдбрд╛рдЙрди рджреГрд╖реНрдЯрд┐рдХреЛрдг", рдЕрдиреНрдпрдерд╛ рд╕рдмреИрд▓реЗ рдорд╛рддреНрд░ Tannenbaum рд░ Oliferov рдЫрд▓рдлрд▓ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫрдиреНред

рдпрд╛рддрд╛рдпрд╛рдд рддрд╣ рдкреНрд░реЛрдЯреЛрдХрд▓

рд╡рд┐рднрд┐рдиреНрди рд╣реЛрд╕реНрдЯрд╣рд░реВрдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдмреАрдЪ рддрд╛рд░реНрдХрд┐рдХ рдЬрдбрд╛рди рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдХреЛ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдпрдмрд╛рдЯ, рддрд╛рд░реНрдХрд┐рдХ рдЬрдбрд╛рди рдПрдХ рдЪреНрдпрд╛рдирд▓ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдЬреБрди рд╕реАрдзрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдЬрдбрд╛рди рдЧрд░реНрджрдЫред

рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдХреЛ рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ

рдпрд╛рддрд╛рдпрд╛рдд рддрд╣ рдкреНрд░реЛрдЯреЛрдХрд▓рд╣рд░реВ рдЕрдиреНрдд рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдЫрдиреН, рддрд░ рдиреЗрдЯрд╡рд░реНрдХ рд░рд╛рдЙрдЯрд░рд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рд╣реЛрдЗрди (рдмрд╛рд╣реЗрдХ - рдбреАрдкреАрдЖрдИ)ред рдкреНрд░реЗрд╖рдХ рдкрдХреНрд╖рдорд╛, рдпрд╛рддрд╛рдпрд╛рдд рддрд╣рд▓реЗ рдкрдард╛рдЙрдиреЗ рдЖрд╡реЗрджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рд╣реБрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рддрд╣ рдбрд╛рдЯрд╛рд▓рд╛рдИ рдЦрдгреНрдб рднрдирд┐рдиреЗ рдпрд╛рддрд╛рдпрд╛рдд рддрд╣ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрджрдЫред

рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдХреЛ рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ

рдпреЛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реЗрд░ (рдЖрд╡рд╢реНрдпрдХ рднрдПрдорд╛) рдПрдкреНрд▓рд┐рдХреЗрд╕рди рд▓реЗрдпрд░ рд╕рдиреНрджреЗрд╢рд╣рд░реВрд▓рд╛рдИ рдЯреБрдХреНрд░рд╛рд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реЗрд░ рд░ рддреА рдкреНрд░рддреНрдпреЗрдХрдорд╛ рдпрд╛рддрд╛рдпрд╛рдд рддрд╣ рд╣реЗрдбрд░ рдердкреЗрд░ рдЧрд░рд┐рдиреНрдЫред

рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдХреЛ рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ

рддреНрдпрд╕рдкрдЫрд┐ рдпрд╛рддрд╛рдпрд╛рдд рддрд╣рд▓реЗ рдЦрдгреНрдбрд▓рд╛рдИ рдкреНрд░реЗрд╖рдХрдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рддрд╣рдорд╛ рдкрдард╛рдЙрдБрдЫ, рдЬрд╣рд╛рдБ рдЦрдгреНрдбрд▓рд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рддрд╣ рдкреНрдпрд╛рдХреЗрдЯ (рдбрд╛рдЯрд╛рдЧреНрд░рд╛рдо) рдорд╛ рдЗрдиреНрдХреНрдпрд╛рдкреНрд╕реБрд▓реЗрдЯреЗрдб рдЧрд░реА рдкрдард╛рдЗрдиреНрдЫред рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдЕрдиреНрддрдорд╛, рдиреЗрдЯрд╡рд░реНрдХ рддрд╣рд▓реЗ рдбрд╛рдЯрд╛рдЧреНрд░рд╛рдордмрд╛рдЯ рдпрд╛рддрд╛рдпрд╛рдд рддрд╣ рдЦрдгреНрдб рдирд┐рдХрд╛рд▓реНрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдпрд╛рддрд╛рдпрд╛рдд рддрд╣рдорд╛ рдкрдард╛рдЙрдБрдЫред рдЕрд░реНрдХреЛ, рдпрд╛рддрд╛рдпрд╛рдд рддрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдЦрдгреНрдбрд▓рд╛рдИ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджрдЫ рддрд╛рдХрд┐ рдпрд╕рдХреЛ рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рдЙрдкрд▓рдмреНрдз рд╣реБрдиреНрдЫред

рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдХреЛ рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбрд╛рдЯрд╛ рдкреНрд░рд╕рд╛рд░рдг рдХреЛ рд╕рд┐рджреНрдзрд╛рдиреНрдд

рдПрдХ рдкреВрд░реНрдг рд╕реБрд░рдХреНрд╖рд┐рдд рдЪреНрдпрд╛рдирд▓ рдорд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбрд╛рдЯрд╛ рдкреНрд░рд╕рд╛рд░рдг

рд╕рдмреИрднрдиреНрджрд╛ рд╕рд░рд▓ рдорд╛рдорд▓рд╛ред рдкрдард╛рдЙрдиреЗ рдкрдХреНрд╖рд▓реЗ рдХреЗрд╡рд▓ рдорд╛рдерд┐рд▓реНрд▓реЛ рддрд╣рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ, рдпрд╕рд▓рд╛рдИ рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХреЛ рдкреНрдпрд╛рдХреЗрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ, рд░ рдпрд╕рд▓рд╛рдИ рдЪреНрдпрд╛рдирд▓рдорд╛ рдкрдард╛рдЙрдБрджрдЫред

рд╕рд░реНрднрд░

package main

import (
    "log"
    "net"
)

func main() {
    // IP-╨░╨┤╤А╨╡╤Б ╤Б╨╡╤А╨▓╨╡╤А╨░ ╨╕ ╨┐╨╛╤А╤В
    serverAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:12000")
    if err != nil {
        log.Fatal(err)
    }

    // ╤Б╨╛╨╖╨┤╨░╨╡╨╝ ╤Б╨╛╨║╨╡╤В ╤Б ╨┐╨╛╤А╤В╨╛╨╝
    serverConn, err := net.ListenUDP("udp", serverAddr)
    if err != nil {
        log.Fatal(err)
    }
    // ╨╛╤В╨╗╨╛╨╢╨╡╨╜╨╜╨╛╨╡ ╨╖╨░╨║╤А╤Л╤В╨╕╨╡ ╤Б╨╛╨╡╨┤╨╕╨╜╨╡╨╜╨╕╤П
    defer serverConn.Close()

    // ╤Б╨╛╨╖╨┤╨░╨╡╨╝ ╨▒╤Г╤Д╨╡╤А ╨┤╨╗╤П ╨┤╨░╨╜╨╜╤Л╤Е
    buf := make([]byte, 1024)

    // ╨╢╨┤╨╡╨╝ ╤Б╨╛╨╡╨┤╨╕╨╜╨╡╨╜╨╕╨╡
    for {
        // ╤З╨╕╤В╨░╨╡╨╝ ╨╖╨░╨┐╤А╨╛╤Б
        n, addr, err := serverConn.ReadFromUDP(buf)
        // ╨┐╨╡╤А╨╡╨┤╨░╨╡╨╝ ╨┤╨░╨╜╨╜╤Л╨╡ ╨▓ ╨Т╨Х╨а╨е╨Э╨Ш╨Щ ╤Г╤А╨╛╨▓╨╡╨╜╤М: ╨▓ ╨╜╨░╤И╨╡╨╝ ╤Б╨╗╤Г╤З╨░╨╡ stdout
        println(string(buf[0:n]), " form ", addr.IP.String())
        if err != nil {
            log.Fatal(err)
        }
        // ╨╛╤В╨▓╨╡╤В╨░ ╨╜╨╡╤В, ╤В.╨║. ╤Н╤В╨╛ UDP + ╨╜╨░╨┤╨╡╨╢╨╜╤Л╨╣ ╨║╨░╨╜╨░╨╗
    }
}

рдЧреНрд░рд╛рд╣рдХ

package main

import (
    "fmt"
    "log"
    "net"
    "time"
)

func main() {
    // IP-╨░╨┤╤А╨╡╤Б ╤Б╨╡╤А╨▓╨╡╤А╨░ ╨╕ ╨┐╨╛╤А╤В
    serverAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:12000")
    if err != nil {
        log.Fatal(err)
    }
    // ╨╗╨╛╨║╨░╨╗╤М╨╜╤Л╨╣ IP-╨░╨┤╤А╨╡╤Б ╨╕ ╨┐╨╛╤А╤В
    localAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:0")
    if err != nil {
        log.Fatal(err)
    }
    // ╤Г╤Б╤В╨░╨╜╨╛╨▓╨║╨░ ╤Б╨╛╨╡╨┤╨╕╨╜╨╡╨╜╨╕╤П
    conn, err := net.DialUDP("udp", localAddr, serverAddr)
    if err != nil {
        log.Fatal(err)
    }
    // ╨╛╤В╨╗╨╛╨╢╨╡╨╜╨╜╨╛╨╡ ╨╖╨░╨║╤А╤Л╤В╨╕╨╡ ╤Б╨╛╨╡╨┤╨╕╨╜╨╡╨╜╨╕╤П
    defer conn.Close()

    for {
        // ╨┐╨╛╨╗╤Г╤З╨╡╨╜╨╕╨╡ ╨┤╨░╨╜╨╜╤Л╤Е ╨╛╤В ╨Т╨Х╨а╨е╨Э╨Х╨У╨Ю ╤Г╤А╨╛╨▓╨╜╤П
        fmt.Print("╨Т╨▓╨╡╨┤╨╕╤В╨╡ ╤Б╤В╤А╨╛╤З╨╜╨╛╨╡ ╨┐╤А╨╡╨┤╨╗╨╛╨╢╨╡╨╜╨╕╨╡ > ")
        var msg string
        _, err := fmt.Scanf("%s", &msg)
        if err != nil {
            log.Fatal(err)
        }
        // ╨┐╨╡╤А╨╡╨┤╨░╨╡╤В╤Б╤П ╨┐╨╛╤В╨╛╨║ ╨▒╨░╨╣╤В, ╨░ ╨╜╨╡ ╤Б╤В╤А╨╛╨║╨░
        buf := []byte(msg)
        // ╨╖╨░╨┐╨╕╤Б╤М (╨┐╨╡╤А╨╡╨┤╨░╤З╨░) ╨▓ ╤Б╨╛╨╡╨┤╨╕╨╜╨╡╨╜╨╕╨╡
        _, err = conn.Write(buf)
        if err != nil {
            log.Fatal(err)
        }
        // 1 ╤Б╨╡╨║╤Г╨╜╨┤╨╛╤З╨║╤Г
        time.Sleep(time.Second * 1)
    }
}

рд╕рдореНрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рд╕рд╛рде рдЪреНрдпрд╛рдирд▓рдорд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбрд╛рдЯрд╛ рдкреНрд░рд╕рд╛рд░рдг

рдЕрд░реНрдХреЛ рдЪрд░рдг рдорд╛рдиреНрдиреБ рд╣реЛ рдХрд┐ рд╕рдмреИ рдкрдард╛рдЗрдПрдХрд╛ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдкрдард╛рдЗрдПрдХрд╛ рдХреНрд░рдордорд╛ рдкреНрд░рд╛рдкреНрдд рднрдПрдХрд╛ рдЫрдиреН, рддрд░ рддрд┐рдиреАрд╣рд░реВрдорд╛ рд░рд╣реЗрдХрд╛ рдмрд┐рдЯрд╣рд░реВ рднреНрд░рд╖реНрдЯ рд╣реБрди рд╕рдХреНрдЫрдиреН рдХрд┐рдирднрдиреЗ рдЪреНрдпрд╛рдирд▓рд▓реЗ рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдВ рд╡рд┐рдХреГрддрд┐рд╣рд░реВ рд╕рд╣рд┐рдд рдбрд╛рдЯрд╛ рдкреНрд░рд╕рд╛рд░рдг рдЧрд░реНрджрдЫред

рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдХреЛ рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ

рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдирд┐рдореНрди рд╕рдВрдпрдиреНрддреНрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ:

  • рддреНрд░реБрдЯрд┐ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреЗ;
  • ╨╛╨▒╤А╨░╤В╨╜╨╛╨╣ ╤Б╨▓╤П╨╖╨╕;
  • рдкреБрди: рдкреНрд░рд╕рд╛рд░рдгред

рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХрд▓рд╣рд░реВ рдЬрд╕рдорд╛ рдзреЗрд░реИ рдкрдЯрдХ рдкреНрд░рд╕рд╛рд░рдг рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд╛рди рд╕рдВрдпрдиреНрддреНрд░рд╣рд░реВ рд╣реБрдиреНрдЫрдиреН рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рджреЛрд╣реЛрд░рд┐рдиреЗ рдЕрдиреБрд░реЛрдз (ARQ) рдкреНрд░реЛрдЯреЛрдХрд▓ рднрдирд┐рдиреНрдЫред
рдердк рд░реВрдкрдорд╛, рдпреЛ рд░рд╕рд┐рджрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛рд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫ, рдЬрдм рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдкрдХреНрд╖рд▓реЗ рдЕрдиреНрддрд┐рдо рдкреНрдпрд╛рдХреЗрдЯрдХреЛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдгрдХреЛ рдкрд░рд┐рдгрд╛рдорд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрдиреИ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИрдиред
рдпрд╕ рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕рдорд╛рдзрд╛рди, TCP рдорд╛ рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдкреНрдпрд╛рдХреЗрдЯрдХреЛ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рднрдПрдХреЛ рдбрд╛рдЯрд╛ рдкреНрдпрд╛рдХреЗрдЯрдорд╛ рдирдпрд╛рдБ рдлрд┐рд▓реНрдб рдердкреНрдиреБ рд╣реЛред

рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдХреЛ рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ

рднрд░рдкрд░реНрджреЛ рдЪреНрдпрд╛рдирд▓рдорд╛ рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдкреНрд░рд╕рд╛рд░рдг рдкреНрдпрд╛рдХреЗрдЯ рд╡рд┐рд░реВрдкрдг рд░ рд╣рд╛рдирд┐рдХреЛ рд╡рд┐рд╖рдп рд╣реЛ

рд╡рд┐рд░реВрдкрдг рд╕рдВрдЧреИ, рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдиреЗрдЯрд╡рд░реНрдХ рдорд╛ рдкреНрдпрд╛рдХреЗрдЯ рд╣рд╛рдирд┐ рдЫред
рд░ рдпреЛ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди, рд╕рдВрдпрдиреНрддреНрд░ рдЖрд╡рд╢реНрдпрдХ рдЫ:

  • рдкреНрдпрд╛рдХреЗрдЯ рд╣рд╛рдирд┐ рдХреЛ рддрдереНрдп рдирд┐рд░реНрдзрд╛рд░рдг;
  • рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдкрдХреНрд╖рд▓рд╛рдИ рд╣рд░рд╛рдПрдХреЛ рдкреНрдпрд╛рдХреЗрдЯрдХреЛ рдкреБрди: рдбреЗрд▓рд┐рднрд░реАред

рдердк рд░реВрдкрдорд╛, рдкреНрдпрд╛рдХреЗрдЬрдХреЛ рд╣рд╛рдирд┐рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпреЛ рд░рд╕рд┐рдж рдЧреБрдорд╛рдЙрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рджрд╛рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рд╡рд╛, рдпрджрд┐ рдХреЗрд╣рд┐ рдкрдирд┐ рд╣рд░рд╛рдПрдХреЛ рдЫреИрди рднрдиреЗ, рдпрд╕рдХреЛ рд╡рд┐рддрд░рдг рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдврд┐рд▓рд╛рдЗрдХреЛ рд╕рд╛рдеред рд╕рдмреИ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдПрдЙрдЯреИ рдХреБрд░рд╛ рдЧрд░рд┐рдиреНрдЫ: рдкреНрдпрд╛рдХреЗрдЯ рдкреБрди: рдкреНрд░рд╕рд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫред рд╕рдордп рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрди, рдпреЛ рд╕рдВрдпрдиреНрддреНрд░рд▓реЗ рдХрд╛рдЙрдиреНрдЯрдбрд╛рдЙрди рдЯрд╛рдЗрдорд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреНрд░рддреАрдХреНрд╖рд╛ рдЕрдиреНрддрд░рд╛рд▓рдХреЛ рдЕрдиреНрддреНрдп рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рддреНрдпрд╕реИрд▓реЗ рдкреНрдпрд╛рдХреЗрдЬрдорд╛ рдиреЗрдЯ TCPKeepAlive рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ 15 рд╕реЗрдХреЗрдиреНрдбрдорд╛ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ:

// defaultTCPKeepAlive is a default constant value for TCPKeepAlive times
// See golang.org/issue/31510
const (
    defaultTCPKeepAlive = 15 * time.Second
)

рдкрдард╛рдЙрдиреЗ рдкрдХреНрд╖рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ рдкреНрдпрд╛рдХреЗрдЯ рдкреНрд░рд╕рд╛рд░рдг рдЧрд░реНрджрд╛ рдЯрд╛рдЗрдорд░ рд╕реБрд░реБ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ (рдкрд╣рд┐рд▓реЛ рд░ рджреЛрд╕реНрд░реЛ рдкрдЯрдХ), рдЯрд╛рдЗрдорд░рдмрд╛рдЯ рдЕрд╡рд░реЛрдзрд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рд▓рд╛рдИ рд░реЛрдХреНрдиреБрд╣реЛрд╕реНред

рддреНрдпрд╕реЛрднрдП, рд╣рд╛рдореА рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХрд▓рдХрд╛ рдореБрдЦреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛рд╣рд░реВрд╕рдБрдЧ рдкрд░рд┐рдЪрд┐рдд рднрдПрдХрд╛ рдЫреМрдВ:

  • рдЪреЗрдХрд╕рдорд╣рд░реВ;
  • рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛;
  • рдЯрд╛рдЗрдорд░;
  • рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рд╛рдкреНрддрд┐рд╣рд░реВред

рддрд░ рддреНрдпреЛ рд╕рдмреИ рд╣реЛрдЗрди!

рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧрдХреЛ рд╕рд╛рде рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХрд▓

рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд╡рд┐рдЪрд╛рд░ рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рднреЗрд░рд┐рдпрдиреНрдЯрдорд╛, рднрд░рдкрд░реНрджреЛ рдбреЗрд▓рд┐рднрд░реА рдкреНрд░реЛрдЯреЛрдХрд▓ рдзреЗрд░реИ рдЕрд╕рдХреНрд╖рдо рдЫред RTT рдмрдвреНрджреИ рдЬрд╛рдБрджрд╛ рдпрд╕рд▓реЗ рд╕рдЮреНрдЪрд╛рд░ рдЪреНрдпрд╛рдирд▓рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рд╕рд╛рд░рдгрд▓рд╛рдИ "рдврд┐рд▓реЛ" рдЧрд░реНрди рдерд╛рд▓реНрдЫред рдпрд╕рдХреЛ рджрдХреНрд╖рддрд╛ рдмрдврд╛рдЙрди рд░ рд╕рдЮреНрдЪрд╛рд░ рдЪреНрдпрд╛рдирд▓ рдХреНрд╖рдорддрд╛рдХреЛ рд░рд╛рдореНрд░реЛ рдЙрдкрдпреЛрдЧ рдЧрд░реНрди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред

рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдХреЛ рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ

рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдХреЛ рдкреНрд░рдпреЛрдЧрд▓реЗ рдирд┐рдореНрддреНрдпрд╛рдЙрдБрдЫ:

  • рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛рд╣рд░реВрдХреЛ рджрд╛рдпрд░рд╛ рдмрдврд╛рдЙрдБрджреИ, рдХрд┐рдирдХрд┐ рдкрдард╛рдЗрдПрдХрд╛ рд╕рдмреИ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ (рдкреБрди: рдкреНрд░рд╕рд╛рд░рдг рдмрд╛рд╣реЗрдХ) рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдкрдорд╛ рдкрд╣рд┐рдЪрд╛рди рд╣реБрдиреБрдкрд░реНрдЫ;
  • рдкреНрд░рд╕рд╛рд░рдг рд░ рдкреНрд░рд╛рдкреНрдд рдкрдХреНрд╖рд╣рд░реВрдорд╛ рдмрдлрд░рд╣рд░реВ рдмрдврд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рджрд╛рдпрд░рд╛ рд░ рдмрдлрд░ рд╕рд╛рдЗрдЬ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рдкреНрд░реЛрдЯреЛрдХрд▓рд▓реЗ рдкреНрдпрд╛рдХреЗрдЯ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░, рд╣рд╛рдирд┐, рд░ рдврд┐рд▓рд╛рдЗрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдорд╛ рд▓рд┐рдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдЩрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╕рдЪреНрдпрд╛рдЙрди рджреБрдИ рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреН:

  • рдПрди рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН;
  • рдЪрдпрдирд╛рддреНрдордХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ред

N рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдкрдЫрд╛рдбрд┐ рдЬрд╛рдБрджреИ - рд╕реНрд▓рд╛рдЗрдбрд┐рдЩ рд╡рд┐рдиреНрдбреЛ рдкреНрд░реЛрдЯреЛрдХрд▓

рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдХреЛ рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ

рдкреНрд░реЗрд╖рдХрд▓реЗ рддреАрди рдкреНрд░рдХрд╛рд░рдХрд╛ рдШрдЯрдирд╛рд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрдиреБрдкрд░реНрдЫ:

  • рдЙрдЪреНрдЪ рд╕реНрддрд░рдХреЛ рдкреНрд░реЛрдЯреЛрдХрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд▓ред рдЬрдм рдбрд╛рдЯрд╛ рдкрдард╛рдЙрдиреЗ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ "рдорд╛рдерд┐рдмрд╛рдЯ" рднрдирд┐рдиреНрдЫ, рдкрдард╛рдЙрдиреЗ рдкрдХреНрд╖рд▓реЗ рдкрд╣рд┐рд▓реЗ рд╕рдЮреНрдЭреНрдпрд╛рд▓ рднрд░реНрдиреЗ рдбрд┐рдЧреНрд░реА рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫ (рдЕрд░реНрдерд╛рдд, рд░рд╕рд┐рджрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдкрд░реНрдЦрд┐рд░рд╣реЗрдХреЛ N рдкрдард╛рдЗрдПрдХреЛ рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐)ред рдпрджрд┐ рд╕рдЮреНрдЭреНрдпрд╛рд▓ рдЦрд╛рд▓реА рдЫ рднрдиреЗ, рдирдпрд╛рдБ рдкреНрдпрд╛рдХреЗрдЯ рдЙрддреНрдкрдиреНрди рд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реБрдиреНрдЫ, рд░ рдЪрд░ рдорд╛рдирд╣рд░реВ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рд╣реБрдиреНрдЫрдиреНред рдЕрдиреНрдпрдерд╛, рдкрдард╛рдЙрдиреЗ рдкрдХреНрд╖рд▓реЗ рдорд╛рдерд┐рд▓реНрд▓реЛ рддрд╣рдорд╛ рдбреЗрдЯрд╛ рдлрд░реНрдХрд╛рдЙрдБрдЫ, рд░ рдпреЛ рд╕рдЮреНрдЭреНрдпрд╛рд▓ рднрд░рд┐рдПрдХреЛ рд╕рдВрдХреЗрдд рд╣реЛред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдорд╛рдерд┐рд▓реНрд▓реЛ рддрд╣рд▓реЗ рдХреЗрд╣рд┐ рд╕рдордп рдкрдЫрд┐ рдкреБрди: рдбрд╛рдЯрд╛ рдкреНрд░рд╕рд╛рд░рдг рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдорд╛, рдкреНрд░реЗрд╖рдХрд▓реЗ рдпрд╛ рдд рдбрд╛рдЯрд╛ рдмрдлрд░ рдЧрд░реНрдиреЗрдЫ (рддреБрд░реБрдиреНрддреИ рдкрдард╛рдЙрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛) рд╡рд╛ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рди рдореЗрдХрд╛рдирд┐рдЬрдо (рдЬрд╕реНрддреИ рд╕реЗрдорд╛рдлреЛрд░ рд╡рд╛ рдЭрдгреНрдбрд╛) рдЫ рдЬрд╕рд▓реЗ рдорд╛рдерд┐рд▓реНрд▓реЛ рддрд╣рд▓рд╛рдИ рд╡рд┐рдиреНрдбреЛ рдЦрд╛рд▓реА рд╣реБрдБрджрд╛ рдорд╛рддреНрд░ рдкрдард╛рдЙрдиреЗ рдкреНрд░рдХрд╛рд░реНрдп рдХрд▓ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред ред
  • рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИред рдкреНрд░реЛрдЯреЛрдХрд▓рдорд╛, рдЕрдиреБрдХреНрд░рдо рдирдореНрдмрд░ N рднрдПрдХреЛ рдкреНрдпрд╛рдХреЗрдЯрдХреЛ рд▓рд╛рдЧрд┐, N рдЕрдШрд┐рдХреЛ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ рднрдПрдХрд╛ рд╕рдмреИ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╛рдкреНрдд рднрдПрдХреЛ рдЬрдирд╛рдЙрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд╡реАрдХреГрддрд┐ рдЬрд╛рд░реА рдЧрд░рд┐рдиреНрдЫред
  • рдкреНрд░рддреАрдХреНрд╖рд╛ рдЕрдиреНрддрд░рд╛рд▓ рд╕рдорд╛рдкреНрдд рднрдПрдХреЛ рдЫред рдШрд╛рдЯрд╛ рд░ рдкреНрдпрд╛рдХреЗрдЯ рд░ рд░рд╕рд┐рджрд╣рд░реВрдХреЛ рдврд┐рд▓рд╛рдЗрдХреЛ рддрдереНрдпрд╛рдЩреНрдХ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрди, рдкреНрд░реЛрдЯреЛрдХрд▓рд▓реЗ рдЯрд╛рдЗрдорд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдпрджрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдиреНрддрд░рд╛рд▓ рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫ рднрдиреЗ, рдкрдард╛рдЙрдиреЗ рдкрдХреНрд╖рд▓реЗ рд╕рдмреИ рдкрдард╛рдЗрдПрдХрд╛ рдЕрдкрд░рд┐рдЪрд┐рдд рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдкреБрди: рдкрдард╛рдЙрдБрдЫред

рдЪрдпрдирд╛рддреНрдордХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐

рдЬрдм рд╕рдЮреНрдЭреНрдпрд╛рд▓ рдЖрдХрд╛рд░ рд░ рдереНрд░реБрдкреБрдЯ-рдкреНрд░рд╕рд╛рд░ рдврд┐рд▓рд╛рдЗ рдЙрддреНрдкрд╛рджрди рдареВрд▓реЛ рд╣реБрдиреНрдЫ, рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдХреЛ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдорд╛ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕реНрддреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдПрдХрд▓ рдкреНрдпрд╛рдХреЗрдЯ рддреНрд░реБрдЯрд┐рд▓реЗ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдкреБрди: рдкреНрд░рд╕рд╛рд░рдг рд╣реБрди рд╕рдХреНрдЫ, рдЬрд╕рдордзреНрдпреЗ рдзреЗрд░реИ рдЬрд╕реЛ рдЖрд╡рд╢реНрдпрдХ рдерд┐рдПрдиред

рдЙрджрд╛рд╣рд░рдг:

рд╕рдмреИ рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рд╕реИрджреНрдзрд╛рдиреНрддрд┐рдХ рдЕрднреНрдпрд╛рд╕рд╣рд░реВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдорд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рдиреНрдЫ рдЯреАрд╕реАрдкреАред рд░ рдпрджрд┐ рдХрд╕реИрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ рдХрд╕рд░реА рд░рд╛рдореНрд░реЛ - рд╕реНрд╡рд╛рдЧрдд.

рд╕рд░реНрднрд░

package main

import (
    "bufio"
    "fmt"
    "log"
    "net"
    "strings"
)

func main() {
    // ╤Б╨╛╨╖╨┤╨░╨╡╨╝ ╤Б╨╛╨║╨╡╤В ╤Б ╨┐╨╛╤А╤В╨╛╨╝ 
    ln, err := net.Listen("tcp", ":8081")
    if err != nil {
        log.Fatalln(err)
    }
    // ╨╛╨╢╨╕╨┤╨░╨╜╨╕╨╡ ╨▓╤Л╨╖╨╛╨▓╨░
    conn, _ := ln.Accept()

    for {
        // ╤Б╤З╨╕╤В╤Л╨▓╨░╨╜╨╕╨╡ ╨┤╨░╨╜╨╜╤Л╤Е
        msg, err := bufio.NewReader(conn).ReadString('n')
        if err != nil {
            log.Fatalln(err)
        }
        // ╨▓╤Л╨▓╨╛╨┤ ╤Б╨╛╨╛╨▒╤Й╨╡╨╜╨╕╤П ╨▓ stdout
        fmt.Print("Message Received:", string(msg))
        // ╨┐╨╡╤А╨╡╨▓╨╛╨┤ ╤Б╤В╤А╨╛╨║╨╕ ╨▓ ╨▓╨╡╤А╤Е╨╜╨╕╨╣ ╤А╨╡╨│╨╕╤Б╤В╤А
        newMsg := strings.ToUpper(msg)
        // ╨╛╤В╨┐╤А╨░╨▓╨║╨░ ╨┤╨░╨╜╨╜╤Л╤Е
        conn.Write([]byte(newMsg + "n"))
    }
}

рдЧреНрд░рд╛рд╣рдХ

package main

import (
    "bufio"
    "fmt"
    "log"
    "net"
    "os"
)

func main() {
    // ╤Г╤Б╤В╨░╨╜╨╛╨▓╨║╨░ ╤Б╨╛╨╡╨┤╨╕╨╜╨╡╨╜╨╕╤П
    conn, err := net.Dial("tcp", "127.0.0.1:8081")
    if err != nil {
        log.Fatalln(err)
    }

    for {
        // ╤Б╤З╨╕╤В╤Л╨▓╨░╨╜╨╕╨╡ ╨┤╨░╨╜╨╜╤Л╤Е ╤Б stdin
        reader := bufio.NewReader(os.Stdin)
        fmt.Print("Text to send: ")
        // ╨┐╨╛╤Б╤В╤А╨╛╤З╨╜╨╛
        text, err := reader.ReadString('n')
        if err != nil {
            log.Fatalln(err)
        }
        // ╨╛╤В╨┐╤А╨░╨▓╨║╨░
        fmt.Fprintf(conn, text+"n")
        // ╨┐╤А╨╕╨╡╨╝
        msg, err := bufio.NewReader(conn).ReadString('n')
        if err != nil {
            log.Fatalln(err)
        }
        // ╨▓╤Л╨▓╨╛╨┤ ╨┐╨╛╨╗╤Г╤З╨╡╨╜╨╜╨╛╨│╨╛ ╨╛╤В╨▓╨╡╤В╨░
        fmt.Print("Msg from Server: " + msg)
    }
}

рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛

рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рд░ рдкреНрд░рдпреЛрдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рд╕рдВрдпрдиреНрддреНрд░

рддрдВрддреНрд░
рдЖрд╡реЗрджрди, рдЯрд┐рдкреНрдкрдгреА

рдпреЛрдЧрдлрд▓ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдкреНрд░рд╕рд╛рд░рд┐рдд рдкреНрдпрд╛рдХреЗрдЯрдорд╛ рдмрд┐рдЯ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ

рдЯрд╛рдЗрдорд░
рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдиреНрддрд░рд╛рд▓ рдЧрдгрдирд╛ рдЧрд░реНрджрдЫ рд░ рдпреЛ рдХрд╣рд┐рд▓реЗ рд╕рдорд╛рдкреНрдд рднрдПрдХреЛ рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫред рдкрдЫрд┐рд▓реНрд▓реЛрдХреЛ рдЕрд░реНрде рд╣реЛ рдХрд┐ рдЙрдЪреНрдЪ рд╕реНрддрд░рдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛рдХреЛ рд╕рд╛рде рдкреНрдпрд╛рдХреЗрдЯ рд╡рд╛ рдпрд╕рдХреЛ рд░рд╕рд┐рдж рдкреНрд░рд╕рд╛рд░рдгрдХреЛ рдХреНрд░рдордорд╛ рд╣рд░рд╛рдПрдХреЛ рдЫред рдпрджрд┐ рдПрдХ рдкреНрдпрд╛рдХреЗрдЯ рдврд┐рд▓рд╛рдЗ рд╕рдВрдЧ рдбреЗрд▓рд┐рднрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ, рддрд░ рд╣рд░рд╛рдПрдХреЛ рдЫреИрди (рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдиреНрддрд░рд╛рд▓рдХреЛ рд╕рдордп рднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ рд╕рдорд╛рдкреНрддрд┐), рд╡рд╛ рд░рд╕рд┐рдж рд╣рд░рд╛рдПрдХреЛ рдЫ, рдкреБрди: рдкреНрд░рд╕рд╛рд░рдг рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдкрдХреНрд╖рдорд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреНрдпрд╛рдХреЗрдЯ рдирд┐рдореНрддреНрдпрд╛рдЙрдБрдЫред

рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛
рдкреНрд░реЗрд╖рдХрдмрд╛рдЯ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдорд╛ рдкрдард╛рдЗрдПрдХрд╛ рдбреЗрдЯрд╛ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдХреЛ рдХреНрд░рдорд┐рдХ рд╕рдВрдЦреНрдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдкреНрд░рд╛рдкреНрдд рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛рдорд╛ рдЕрдиреНрддрд░рд▓реЗ рд░рд┐рд╕реАрднрд░рд▓рд╛рдИ рдкреНрдпрд╛рдХреЗрдЯ рд╣рд░рд╛рдПрдХреЛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдПрдЙрдЯреИ рдкреНрдпрд╛рдХреЗрдЯ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛рдХреЛ рдЕрд░реНрде рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдПрдХрдЕрд░реНрдХрд╛рдХреЛ рдирдХреНрдХрд▓ рд╣реБрдиреН

рдкреБрд╖реНрдЯрд┐рдХрд░рдг
рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдЕрдиреНрддрджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЧрд░рд┐рдПрдХреЛ рд░ рдкрдард╛рдЙрдиреЗ рдЕрдиреНрддрдорд╛ рд╕рдореНрдмрдиреНрдзрд┐рдд рдкреНрдпрд╛рдХреЗрдЯ рд╡рд╛ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдХреЛ рд╕рдореВрд╣ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╛рдкреНрдд рднрдПрдХреЛ рдЫ рднрдиреЗрд░ рд╕рдВрдХреЗрдд рдЧрд░реНрджреИред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╕реНрд╡реАрдХреГрддрд┐рд▓реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╛рдкреНрдд рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдкреНрд░реЛрдЯреЛрдХрд▓рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджреИ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░ рд╕рдореВрд╣ рдкреБрд╖реНрдЯрд┐рдХрд░рдгрд╣рд░реВ рдЫреБрдЯреНрдпрд╛рдЗрдПрдХреЛ рдЫ

рдирдХрд╛рд░рд╛рддреНрдордХ рдкреБрд╖реНрдЯрд┐
рдкреНрдпрд╛рдХреЗрдЯ рдЧрд▓рдд рд░реВрдкрдорд╛ рдкреНрд░рд╛рдкреНрдд рднрдПрдХреЛ рдерд┐рдпреЛ рднрдиреЗрд░ рдкреНрд░реЗрд╖рдХрд▓рд╛рдИ рд╕реВрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдпреЛред рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реНрд╡реАрдХреГрддрд┐рдорд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдкреНрдпрд╛рдХреЗрдЯрдХреЛ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреНрдЫ рдЬреБрди рд╕рд╣реА рд░реВрдкрдорд╛ рдкреНрд░рд╛рдкреНрдд рднрдПрдХреЛ рдерд┐рдПрдиред

рд╡рд┐рдиреНрдбреЛ, рдХрдиреНрд╡реЗрдпрд░рд╛рдЗрдЬреЗрд╢рди
рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛рд╣рд░реВрдХреЛ рджрд╛рдпрд░рд╛ рд╕реАрдорд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬреБрди рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдкреНрд░рд╕рд╛рд░рдг рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдорд▓реНрдЯрд┐рдХрд╛рд╕реНрдЯ рд░ рд╣реНрдпрд╛рдиреНрдбрд╢реЗрдХрд▓реЗ рд╕реНрд╡реАрдХреГрддрд┐рд╣рд░реВрдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛рдХреЛ рддреБрд▓рдирд╛рдорд╛ рдкреНрд░реЛрдЯреЛрдХрд▓ рдереНрд░реБрдкреБрдЯрд▓рд╛рдИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдмрдврд╛рдЙрди рд╕рдХреНрдЫред рд╣рд╛рдореА рджреЗрдЦреНрдиреЗрдЫреМрдВ, рд╡рд┐рдиреНрдбреЛрдХреЛ рдЖрдХрд╛рд░ рд░рд┐рд╕реЗрдкреНрд╢рди рд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдЕрдиреНрддрдХреЛ рдмрдлрд░рд┐рдЩ рдХреНрд╖рдорддрд╛рд╣рд░реВ, рд╕рд╛рдереИ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЛрдб рд╕реНрддрд░рдХреЛ рдЖрдзрд╛рд░рдорд╛ рдЧрдгрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рдиреЗрдЯрд╡рд░реНрдХрд┐рдЩрдХрд╛ рд▓рд╛рдЧрд┐ рдЧреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдердк рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ

╨Т рднрдгреНрдбрд╛рд░рд╣рд░реВ.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди