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 アップグレード応答のヘッダに置く//:websoketの 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>