go websocket例子

使用go的基础库 

服务端 websocket.go

package main



import (

    "fmt"

    "net/http"

    "os"

    "time"



    "golang.org/x/net/websocket"

)



//错误处理函数

func checkErr(err error, extra string) bool {

    if err != nil {

        formatStr := " Err : %s\n"

        if extra != "" {

            formatStr = extra + formatStr

        }



        fmt.Fprintf(os.Stderr, formatStr, err.Error())

        return true

    }



    return false

}



func svrConnHandler(conn *websocket.Conn) {

    request := make([]byte, 128)

    defer conn.Close()

    go func() {

        for {

            conn.Write([]byte("World !"))

            time.Sleep(time.Second * 10)

        }



    }()

    for {

        readLen, err := conn.Read(request)

        if checkErr(err, "Read") {

            break

        }



        //socket被关闭了

        if readLen == 0 {

            fmt.Println("Client connection close!")

            break

        } else {

            //输出接收到的信息

            fmt.Println(string(request[:readLen]))



            time.Sleep(time.Second)

            //发送

            conn.Write([]byte("World !"))

        }

    }

}



func main() {

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

        http.ServeFile(w, r, "web.html")

    })

    http.Handle("/ws", websocket.Handler(svrConnHandler))

    err := http.ListenAndServe(":1234", nil)

    checkErr(err, "ListenAndServe")

    fmt.Println("Func finish.")

}

 客户端:web.html

<!-- websockets.html -->
<input id="input" type="text" />
<button onclick="send()">Send</button>
<pre id="output"></pre>
<script>
	var input = document.getElementById("input");
	var output = document.getElementById("output");
	var socket = new WebSocket("ws://localhost:1234/ws");
 
	socket.onopen = function () {
		output.innerHTML += "Status: Connected\n";
	};
 
	socket.onmessage = function (e) {
		output.innerHTML += "Server: " + e.data + "\n";
	};
 
	function send() {
		socket.send(input.value);
		input.value = "";
	}
</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值