golang Websocket チュートリアル: オンライン Q&A 機能を開発する方法、具体的なコード例が必要です
インターネットが発達した今日の時代では、オンライン Q&A プラットフォームは人々のためのプラットフォームになりました知識を獲得し、経験や問題を解決する重要な方法を共有します。即時性と双方向性に対するユーザーのニーズを満たすには、Websocket テクノロジーを使用してオンラインの質問と回答機能を実装するのが良い選択です。この記事では、Golang を使用して Websocket をベースにしたオンライン質疑応答機能を開発する方法と、具体的なコード例を紹介します。
1. プロジェクトの準備
チュートリアルを始める前に、いくつかの準備をする必要があります:
- Golang のインストール: まず、コンピューターに Golang がインストールされていることを確認してください。 Golang 公式 Web サイトからダウンロードしてインストールします。
- 必要なライブラリをインストールします。Websocket 機能を実装するには、Golang のゴリラ/WebSocket ライブラリを使用します。次のコマンドでインストールできます:
go get github.com/gorilla/websocket - プロジェクト ディレクトリ構造を作成します: 作業パスにプロジェクト ファイルを保存する新しいフォルダーを作成します。
2. Websocket サーバーの作成
最初に、クライアント接続とメッセージ配信を処理するための Websocket サーバーを作成する必要があります。プロジェクト ディレクトリに server.go という名前のファイルを作成し、次のコードを追加します。
package main import ( "log" "net/http" "github.com/gorilla/websocket" ) // 定义全局变量用于存储连接的客户端 var clients = make(map[*websocket.Conn]bool) // 定义通道用于传递消息 var broadcast = make(chan Message) // 定义消息结构体 type Message struct { Username string `json:"username"` Content string `json:"content"` } // 定义升级HTTP请求为Websocket的方法 var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, } // 处理Websocket连接 func handleConnections(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Fatal(err) } defer conn.Close() // 将连接的客户端添加到全局变量中 clients[conn] = true for { var msg Message err := conn.ReadJSON(&msg) if err != nil { log.Printf("error: %v", err) delete(clients, conn) break } broadcast <- msg } } // 处理广播消息 func handleMessages() { for { msg := <-broadcast for client := range clients { err := client.WriteJSON(msg) if err != nil { log.Printf("error: %v", err) client.Close() delete(clients, client) } } } } func main() { http.HandleFunc("/ws", handleConnections) go handleMessages() log.Println("Server start on http://localhost:8000") log.Fatal(http.ListenAndServe(":8000", nil)) }
上記のコードは、接続されているすべてのクライアントにクライアント メッセージをブロードキャストする単純な Websocket サーバーを実装します。
3. Websocket クライアントの作成
次に、ユーザーがフロントエンド ページでメッセージを送受信するための Websocket クライアントを作成する必要があります。プロジェクト ディレクトリに client.go という名前のファイルを作成し、次のコードを追加します。
package main import ( "log" "net/url" "os" "os/signal" "time" "github.com/gorilla/websocket" ) // 定义消息结构体 type Message struct { Username string Content string } func main() { // 创建WebSocket连接 u := url.URL{Scheme: "ws", Host: "localhost:8000", Path: "/ws"} c, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { log.Fatal("dial:", err) } defer c.Close() // 监听系统信号 interrupt := make(chan os.Signal, 1) signal.Notify(interrupt, os.Interrupt) // 创建一个通道用于接收消息 done := make(chan struct{}) // 创建一个协程来监听用户输入并发送消息 go func() { for { var msg Message err := c.ReadJSON(&msg) if err != nil { log.Println("read:", err) close(done) return } log.Printf("received: %v", msg) } }() // 创建一个协程来发送消息给服务器 go func() { ticker := time.NewTicker(time.Second) defer ticker.Stop() for { select { case <-done: return case t := <-ticker.C: err := c.WriteJSON(Message{Username: "Alice", Content: "Hello, World!"}) if err != nil { log.Println("write:", err) return } log.Printf("sent: %v", t.String()) } } }() // 等待系统信号 <-interrupt log.Println("interrupt") // 关闭连接 err = c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) if err != nil { log.Println("write close:", err) } select { case <-done: case <-time.After(time.Second): } log.Println("server closed") }
上記のコードは、サーバーに毎秒メッセージを送信し、受信したニュースを印刷する Websocket クライアントを作成します。
4. コンパイルと実行
プロジェクト ディレクトリでターミナルを開き、次のコマンドを実行してプロジェクトをコンパイルして実行します:
- コンパイル サーバー
go build server .go - サーバーを実行します
./server - クライアントをコンパイルします
go build client.go - クライアントを実行します
./client
5. テスト機能
ブラウザで http://localhost:8000 にアクセスし、コンソールを開くと、クライアントから送信されたメッセージと他のクライアントからのブロードキャスト メッセージが表示されます。コンソールにメッセージを入力して Enter キーを押してみると、接続されているすべてのクライアントにメッセージがブロードキャストされます。
6. 概要
このチュートリアルでは、Golang と Websocket テクノロジを使用して、簡単なオンライン質問と回答機能を開発する方法を紹介します。このチュートリアルを学習すると、Websocket サーバーとクライアントの作成方法を理解し、関連するテクノロジをプロジェクトに適用できるようになります。このチュートリアルがあなたのお役に立てば幸いです。また、プログラミングを楽しく学習できることを願っています。
以上がgolang Websocket チュートリアル: オンライン質疑応答機能の開発方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

goisidealforforbeginnersandsutable forcloudnetworkservicesduetoitssimplicity、andconcurrencyfeatures.1)installgofromtheofficialwebsiteandverify with'goversion'.2)

開発者は、次のベストプラクティスに従う必要があります。1。ゴルチンを慎重に管理して、リソースの漏れを防ぎます。 2。同期にチャネルを使用しますが、過剰使用を避けます。 3。同時プログラムのエラーを明示的に処理します。 4. GomaxProcsを理解して、パフォーマンスを最適化します。これらのプラクティスは、リソースの効果的な管理、適切な同期の実装、適切なエラー処理、パフォーマンスの最適化を確保し、それによりソフトウェアの効率と保守性を向上させるため、効率的で堅牢なソフトウェア開発には重要です。

goexcelsinproductionduetoitsperformanceandsimplicity、butrequirescarefulmanagement of sscalability、errorhandling、andresources.1)dockerusesgofores goforesesgorusesgolusesgotainermanagement.2)uberscalesmicroserviceswithgo、facingchallengesinservicememameme

標準のエラーインターフェイスが限られた情報を提供し、カスタムタイプがコンテキストと構造化された情報を追加できるため、エラータイプをカスタマイズする必要があります。 1)カスタムエラータイプには、エラーコード、場所、コンテキストデータなどを含めることができます。2)デバッグ効率とユーザーエクスペリエンスを改善する3)ただし、その複雑さとメンテナンスコストに注意する必要があります。

goisidealforbuildingscalablessystemsduetoitssimplicity、効率性、およびビルド・インコンカレンシsupport.1)

intionSingOrunautomaticallyは()andareuseforstingupenments andinitializingvariables.usemforsimpletasks、回避効果を回避し、測定可能性を測定することを検討します。

goinitializeSpackages intheordertheyareimport extionsitions withinitionsiteintheirdefinition ordord、およびfilenamesdetermineTheOordCrossMultiplefiles.thisprocesccanbeandeanded by -dependenciessedieSiesは、このマイレアドカンフレシニティン化の対象となります


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版
中国語版、とても使いやすい

WebStorm Mac版
便利なJavaScript開発ツール

ホットトピック









