golangのWebSocketを達成

1.必要用WebSocketパッケージ:
"github.com/gorilla/websocket"
メインパッケージ

のインポート(
	"github.com/gorilla/websocket" 
	"learngo /のWebSocket / IMPL" 
	"NET / HTTP" 
	"時間" 

VAR(
	アップグwebsocket.Upgrader = { 
		//クロスドメインアクセス許可
		CheckOriginを:FUNC(R * HTTP .request){BOOLの
			真に復帰
		} 
	} 

FUNC wsHandler(http.ResponseWriter W、R&LT http.Request *){ 
	//w.Write([]byte("hello「))
	//要求が受信されたHTTP(アップグレード)完全なプロトコル変換用WebSocket 
	アップグレード応答のヘッダに置く//:w​​ebsoketの
	VAR(
		wsConn websocket.Conn * 
		ERRエラー
		データが[]バイト
		コネティカットimpl.Connection *が
	のWebSocket(バッククライアントへのメッセージ)をアップグレード//
	wsConn場合、ERR = upgrader.Upgrade(W、R、NIL)。!ERR =ゼロ{ 
		//报错了、直接返回底层的なWebSocket链接就会终断掉
		リターン
	} 
	CONN、ERR = impl.InitConnection(wsConn)であれば、誤る= nilの{!
		後藤ERR 
	} 

	//心跳
	(){FUNCを行く
		VAR(
			ERRエラー
		のための{ 
			場合、ERR = conn.WriteMessage([]バイト( "heatbeat")); !誤る=ゼロ{ 
				リターン
			} 
			time.Sleep(5 * time.Second)
		} 

	}()

	{ための
		データであれば、ERR = conn.ReadMessage()。!ERR =ゼロ{ 
			ジャンプERR 
		} 
		ERR = conn.WriteMessage(データ)であれば、ERR = nilの{!
			後藤ERR 
		} 
	} 
ERR:
	conn.close()
} 

userHandler FUNC(http.ResponseWriter W、R * http.Request){
	w.Write([]バイト( "Hello Worldの!"))
} 

funcをメイン(){ 
	//のhttp:// localhostを:7777 / WS 
	http.HandleFunc( "/ WS"、wsHandler)
	http.HandleFunc( "/ユーザー」userHandler)
	//服务端启动
	http.ListenAndServe( "0.0.0.0:7777"、ゼロ)
}

 

モジュールを実装します。スレッドセーフ

主パッケージ

のインポート(
	"github.com/gorilla/websocket" 
	"NET / HTTP" 

VAR(
	アップグwebsocket.Upgrader = { 
		//許可クロスドメインアクセス
		CheckOrigin:FUNC(R&LT http.Request *){BOOLの
			真に復帰
		} 
	} 

FUNC wsHandler(http.ResponseWriter、R&LT http.Request *){W 
	//w.Write([]byte("hello「))
	要求をアップグレードする(受信される// HTTP)、プロトコル変換が完了するのWebSocket 
	応答//ヘッダーのアップグレード中に入れ:websoketの
	VAR(
		コネチカットwebsocket.Conn * 
		ERR誤差
		// INT MSGTYPE 
		データ[]バイト
	)は
	!コネチカット、upgrader.Upgrade ERR = IF(W、R&LT、NIL); ERR =ゼロ{ 
		//与えられましたWebSocketう壊れたリンクを直接バックエンドボトム 
		戻ります
	} 
	長いリンク、データ送受信websocket.Connオブジェクトを取得// 
	ため{ 
		//テキスト(JSON)、バイナリ
		// _場合、データ、ERR = conn.ReadMessage();!ERR =ゼロ{ 
		IF _、データ、ERR = conn.ReadMessageは();! ERR =ゼロ{ 
			//のWebSocketオフ所与
			GOTO ERRを
		} 
		//データを送信し、戻り値がエラーかどうかを決定する
		場合に、ERR = conn.WriteMessage(websocket.TextMessage、データ );! ERR = {ゼロ
			所与// 
			GOTO ERR 
		} 
	} 
のタグ//誤差
ERR:
	はconn.close()
} 

HelloHandlerのFUNC(http.ResponseWriter R、W&LT http.Request *){ 
	w.Write([]バイト(「Hello Worldの! "))
} 

FUNCメイン(){ 
	// HTTP:// localhostを:7777 / WS 
	http.HandleFunc(" / WS」、wsHandler)
	http.HandleFunc(HelloHandlerの"/こんにちは")
	//サーバが起動します
	( "0.0.0.0:7777"はnil)http.ListenAndServeを
}

 JSファイル:

 

<!DOCTYPE HTML> 
<HTML> 
<HEAD> 
    <メタのcharset = "UTF-8"> 
    <スクリプト> 
        window.addEventListener( "負荷"機能(EVT){ 
            VAR出力=のdocument.getElementById( "出力"); 
            VAR入力=のdocument.getElementById( "入力"); 
            VARのWS; 
            VAR印刷=関数(メッセージ){ 
                VARのD =のdocument.createElement( "DIV"); 
                d.innerHTML =メッセージ; 
                output.appendChild(D); 
            }; 
            ドキュメント.getElementById( "オープン")。onclickの=関数(EVT){ 
                (WS)であれば{ 
                    falseを返します。
                }
                WS =新しいのWebSocket( "WS://192.168.230.130:7777 / WS"); 
                ws.onopen =関数(EVT){ 
                    印刷( "OPEN")。
                } 
                ws.onclose =関数(EVT){ 
                    ( "CLOSE")印刷; 
                    WS = NULL; 
                } 
                ws.onmessage =関数(EVT){ 
                    プリント( "RESPONSE:" + evt.data)。
                } 
                ws.onerror =関数(EVT){ 
                    印刷( "ERROR:" + evt.data)。
                } 
                falseを返します。
            }。
            document.getElementById(」
                (もし!WS){ 
                    falseを返します。
                } 
                プリント( "SEND:" + input.value)。
                ws.send(input.value)。
                falseを返します。
            }。
            。のdocument.getElementById( "クローズ")のonclick =機能(EVT){ 
                場合(!WS){ 
                    falseを返します。
                } 
                ws.close()。
                falseを返します。
            }。
        }); 
    </ SCRIPT> 
</ head> 
<body> 
<TABLE> 
    <TR> <TD VALIGN = "トップ"幅= "50%"> 
        <P>
            「送信」接続を閉じるには、「閉じる」サーバーにメッセージを送信します。
            あなたは、メッセージを変更して複数回送信することができます。
        </ P> 
            <フォーム> 
                <ボタンID = "オープン">開く</ button>の
                <ボタンのid = "近い">閉じる</ button>の
            <入力されたID = "入力"タイプ= "テキスト"値= "こんにちは、世界! "> 
            <ボタンのid ="送信">送信</ボタン> 
            </ FORM> 
    </ TD> <TD VALIGN ="トップ」幅= "50%"> 
        <div要素のidは= "出力"> </ div> 
    </ TD> </ TR> </ TABLE>

  

  

おすすめ

転載: www.cnblogs.com/xingyunshizhe/p/11225135.html