Goは、ネットワークプログラミングの組み込みサポートを提供し、効率的でスケーラブルなネットワークアプリケーションの構築に人気のある選択肢となっています。 TCP、UDP、およびhttp:
tcp: TCP通信のために使用する方法を調べてみましょう。 net
パッケージは必要なツールを提供します。 net.listen(" tcp"、":8080")
( ":8080"を希望のポートに置き換える)を使用して、リスナーを作成します。このリスナーは、着信接続を受け入れます。受け入れられている各接続は net.conn
であり、 read
および write
メソッドを使用してデータを読み書きできるようにします。 TCPサーバーの基本的な例は次のとおりです。
<code class="go">パッケージメインインポート(&quot; quot; quot; quot; net&quot;)func handleconnection(conn net.conn){defer conn.close()buffer:= make([] byte、1024) fmt.println(&quot; quot; quot; error ready:&quot;、err)break} fmt.println(&quot; recime:&quot;、string(buffer [:n]))_、err = conn.write([] byte( "server!&quot;&quot;&quot;))if err!= nil {fmt.println(&quotln(」 main(){リスナー、err:= net.listen(&quot; tcp&quot;、&quot;:8080&quot;)if err!= nil {fmt.println(&quot; quot; quot; quot;、err)} defer ristener.close()fmt.println()fmt.println(&quot;&quot; conn:8080&quot; err. conn:conn:conn:conn:conn:conn:conn:conn:8080&quot; != nil {fmt.println(&quot; quot; quot; errer accepting:&quot;、err)continue} go handleconnection(conn)} </code>
udp: udpは同様のアプローチを使用しますが、 net.listen(&quot; tcp; <code> net.listenpacket(&quot; udp&quot;、&quot;:8081&quot;)
。 writeto
および readfrom
メソッドを使用してデータを送信および受信します。 UDPは接続がないため、各パケットは独立しています。
http: goの net/http
パッケージはHTTPサーバーの作成を簡素化します。さまざまなルートのハンドラーを定義し、 http.listenandserve
を使用してサーバーを起動します。例:
<code class="go">パッケージメインインポート(&quot; fmt&quot;&quot; net/http&quot;)func hellohandler(w http.responsewriter、r *http.request){fmt.fprintf(w、&quot;&quot;&quot;&quot;&quot; http.handlefunc(&quot;/&quot;、hello handler)fmt.println(&quot; quot; quot; cout; ristens on:8080&quot;)http.listenandserve(&quot;:8080&quot;、nil)高性能ネットワークサーバー。選択は特定のニーズに依存します: <ul> <li> <strong> <strong> <code> net/http </code>:</strong>汎用HTTPサーバーの場合、標準ライブラリの<code> net/http </code>パッケージは十分で高度に最適化されています。接続プーリングやリクエストマルチプレックスなどの組み込み機能は、高性能に寄与します。</strong> </li> <li> <strong> <strong> <code> gorilla/mux </code>:</strong> <code>よりも洗練されたルーティング機能が必要な場合は</code></strong> </li> </ul></code> gorilla/routers gorilla/routers gorilla/code
fastttp
:は、標準ライブラリよりも grpc
ライブラリは強力で効率的なオプションです。シリアル化にプロトコルバッファーを使用して、コンパクトで高速な通信をもたらします。最良のライブラリは、パフォーマンス、使いやすさ、アプリケーションの要件の複雑さのトレードオフに依存することがよくあります。多くのアプリケーションでは、 net/http
または gorilla/mux
を提供します。
並行性:ゴルチンを使用して、各着信接続を処理するか、同時にリクエストします。これにより、1つの遅い接続が他の接続をブロックするのを防ぎます。チャネルは、たとえば、ゴロウチン間の通信に使用できます。たとえば、完了または共有データを信号または共有するために。取り扱い:各ネットワーク操作後は、常にエラーを確認してください。 defer
を使用して、エラーが発生した場合でもリソース(ネットワーク接続など)が閉じられるようにします。コンテキストキャンセルを使用して、サーバーが閉じているときにゴルチンを優雅にシャットダウンすることを検討してください。エラーを追跡し、問題を診断するために適切なロギングを実装します。
いくつかの設計パターンは、GOネットワークプログラミングで有益であることがわかります:
パターンの選択は、アプリケーションの特定のニーズに依存します。単純なサーバーの場合、リスナーパターンで十分かもしれません。ハイスループット、低遅延のアプリケーションの場合、原子炉またはワーカープールのパターンがより適切かもしれません。複雑な処理パイプラインの場合、パイプラインパターンは強力な選択です。
以上がネットワークプログラミング(TCP、UDP、HTTP)にGoを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。