Golang関数のtcp、udp、http、websocketの処理方法

王林
リリース: 2023-05-20 16:40:36
オリジナル
1480 人が閲覧しました

インターネット技術の継続的な発展に伴い、ネットワーク通信は現代の必須スキルとなっています。その過程で、効率的かつ柔軟なプログラミング手法として関数(Function)が、ますます多くのプログラマーに好まれるツールとなりました。これらの機能の中でも特に重要なのは、TCP、UDP、HTTP、WebSocket プロトコルに基づく処理方法であり、今回はこれら 4 つのプロトコルにおける Golang 関数の処理方法に焦点を当てます。

1. TCP プロトコルに基づく機能処理方式

TCP (Transmission Control Protocol) は、コネクション指向で信頼性の高い、バイト ストリーム ベースのトランスポート層プロトコルです。 Golang では、次のコードを使用して単純な TCP サーバーを作成できます。

package main

import (
    "fmt"
    "net"
)

func main() {
    listener, err := net.Listen("tcp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println("Error listening:", err.Error())
        return
    }

    for {
        conn, err := listener.Accept()
        if err != nil {
            fmt.Println("Error accepting:", err.Error())
            return
        }
        go handleRequest(conn)
    }
}

func handleRequest(conn net.Conn) {
    buf := make([]byte, 1024)
    for {
        _, err := conn.Read(buf)
        if err != nil {
            fmt.Println("Error reading:", err.Error())
            return
        }
        conn.Write([]byte("Hello, world!"))
    }
}
ログイン後にコピー

上記のコードでは、net パッケージを使用して TCP リスナーを作成し、Accept() メソッドを使用して、クライアント端末接続。次に、handleRequest() 関数で接続を処理し、その接続で応答を送信します。

2. UDP プロトコルに基づく機能処理方式

UDP (User Datagram Protocol) は、非コネクションで信頼性の低いトランスポート層プロトコルです。 Golang では簡単な UDP サーバーも簡単に作成できます、コードは次のとおりです:

package main

import (
    "fmt"
    "net"
)

func main() {
    udpAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println("Error Resolving UDP address:", err.Error())
        return
    }

    conn, err := net.ListenUDP("udp", udpAddr)
    if err != nil {
        fmt.Println("Error Listening:", err.Error())
        return
    }
    defer conn.Close()

    for {
        buf := make([]byte, 1024)
        _, remoteAddr, err := conn.ReadFromUDP(buf)
        if err != nil {
            fmt.Println("Error Reading:", err.Error())
            continue
        }
        conn.WriteToUDP([]byte("Hello, world!"), remoteAddr)
    }
}
ログイン後にコピー

3. HTTP プロトコルに基づく関数処理メソッド

HTTP (Hypertext Transfer Protocol) はアプリケーションですWeb ブラウザと Web サーバーの間でデータを転送するために使用される層プロトコル。 Golang では、標準ライブラリの net/http パッケージを使用して、単純な HTTP サーバーを作成できます。コードは次のとおりです:

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, world!")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}
ログイン後にコピー

上記のコードでは、HTTP を処理するための handler() 関数を定義しています。リクエストを作成し、main() 関数で http.HandleFunc() を使用してハンドラーを指定します。最後に、http.ListenAndServe() メソッドを使用してサーバーを起動します。

4. WebSocket プロトコルに基づく機能処理方法

WebSocket は全二重プロトコルであり、通常、オンライン ゲームやインスタント チャットなどのインスタント通信機能の実装に使用されます。 Golang では、ゴリラ/websocket パッケージを使用して WebSocket サーバーを作成できます。コードは次のとおりです:

package main

import (
    "net/http"

    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

func handler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        return
    }
    defer conn.Close()

    for {
        _, message, err := conn.ReadMessage()
        if err != nil {
            return
        }
        conn.WriteMessage(websocket.TextMessage, []byte("Hello, world!"))
    }
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}
ログイン後にコピー

上記のコードでは、gorilla/websocket パッケージを使用して WebSocket サーバーを作成し、ハンドラーを定義します( ) WebSocket 接続を処理する関数。最後に、http.HandleFunc() メソッドと http.ListenAndServe() メソッドを使用してサーバーを起動します。

概要

TCP、UDP、HTTP、または WebSocket プロトコルのいずれであっても、Golang はサーバーを迅速に構築し、さまざまなネットワーク通信を処理するのに役立つ豊富な関数ライブラリを提供します。上記の4つのプロトコルとGolangの処理方法を学ぶことで、関数型プログラミングへの理解が深まり、Golangをより柔軟に活用してさまざまなネットワークアプリケーションを実装できるようになると思います。

以上がGolang関数のtcp、udp、http、websocketの処理方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート