1 package main 2 3 import ( 4 "fmt" 5 "net/http" 6 7 "github.com/gorilla/websocket" 8 ) 9 10 var upgrader = websocket.Upgrader{ 11 // 跨域 12 CheckOrigin: func(r *http.Request) bool { 13 return true 14 }, 15 } 16 17 func main() { 18 http.HandleFunc("/trace", WebSocketHandler) 19 err := http.ListenAndServe("0.0.0.0:8000", nil) 20 if err != nil { 21 fmt.Println("websocket listen and serve is failed") 22 } 23 } 24 25 func WebSocketHandler(w http.ResponseWriter, r *http.Request) { 26 c, err := upgrader.Upgrade(w, r, nil) 27 if err != nil { 28 fmt.Println("websocket connect is failed,err:", err) 29 } 30 defer c.Close() 31 32 for { 33 mt, message, err := c.ReadMessage() 34 if err != nil { 35 fmt.Println("websocket read is failed") 36 break 37 } 38 39 fmt.Println("recv websocket msg: ", string(message)) 40 41 err = c.WriteMessage(mt, message) 42 if err != nil { 43 fmt.Println("websocket write is failed") 44 break 45 } 46 } 47 }
<!DOCTYPE html> <meta charset="utf-8" /> <title>WebSocket Test</title> <script> var websocket; var email; var username; var message; function websocketInit() { // 创建 websocket // websocket = new WebSocket('ws://' + '127.0.0.1:8000' + '/ws'); websocket = new WebSocket('ws://' + '127.0.0.1:8000'+ '/trace'); } function websocketErr() { websocket.onerror = function(evt) { console.log("WebSocketError!"); }; } function myFunction() { var output; myValue(); var str1 = { email:"", username:"", message:"" }; // 给 json 中赋值 str1.email=email; str1.username=username; str1.message=message; // 解析 json 格式数据 // var obj = JSON.parse(str1); // obj.email=email; // obj.username=username; // obj.message=message; // 修改 json 数据后格式不为 json 格式,需要转换为 json 格式 var obj = JSON.stringify(str1) alert(email+"-"+username+"-"+message) alert(obj) // 创建 websocket websocketInit(); // 一旦创建 websocket 成功则会执行 onopen 函数 websocket.onopen = function() { console.log("open"); // 通过 websocket 发送消息 websocket.send(obj); }; // 通过 websocket 接收消息 websocket.onmessage = function(evt) { console.log(evt.data) x=document.getElementById("output"); var value = JSON.parse(evt.data); show = "发送的内容为:<br />email="+value.email+" "+"<br />username="+value.username+" "+"<br />message="+value.message; x.innerHTML=show; }; websocket.onclose =function(evt) { console.log("websocket is close!") } } function myValue() { email=document.getElementById("email").value; username=document.getElementById("username").value; message=document.getElementById("message").value; } </script> <h2>WebSocket Test</h2> <body> <div id="output"> email:<input id="email" type="text" name="email"/><br /> username:<input id="username" type="text" name="username"/><br /> message:<input id="message" type="text" name="message"/><br /> <input type="button" value="点击这里发送数据" onclick="myFunction()"/> </div> </body> </html>
运行 go run ./websocket.go ,将websocket.html在浏览器中运行。