golang websocket

 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在浏览器中运行。

posted @ 2019-07-01 15:00  追逐~~~  阅读(819)  评论(1编辑  收藏  举报