Golang如何使用websocket
下载websocket包$ go get golang.org/x/net/websocket 如果下载失败,可能是被墙了。
可以尝试 $ go get -u github.com/golang/net/websocket 下载后记得将路径改成golang.org/x/net/websocket $ cd $GOPATH $ mkdir -p golang.org/x/net $ cp github.com/golang/net/websocket/ golang.org/x/net/ -R 实例服务端代码server.go package main import ( "fmt" "golang.org/x/net/websocket" "html/template" //支持模板html "log" "net/http" ) func Echo(ws *websocket.Conn) { var err error for { var reply string //websocket接受信息 if err = websocket.Message.Receive(ws,&reply); err != nil { fmt.Println("receive failed:",err) break } fmt.Println("reveived from client: " + reply) msg := "received:" + reply fmt.Println("send to client:" + msg) //这里是发送消息 if err = websocket.Message.Send(ws,msg); err != nil { fmt.Println("send failed:",err) break } } } func web(w http.ResponseWriter,r *http.Request) { //打印请求的方法 fmt.Println("method",r.Method) if r.Method == "GET" { //如果请求方法为get显示login.html,并相应给前端 t,_ := template.ParseFiles("websocket.html") t.Execute(w,nil) } else { //否则走打印输出post接受的参数username和password fmt.Println(r.PostFormValue("username")) fmt.Println(r.PostFormValue("password")) } } func main() { //接受websocket的路由地址 http.Handle("/websocket",websocket.Handler(Echo)) //html页面 http.HandleFunc("/web",web) if err := http.ListenAndServe(":1234",nil); err != nil { log.Fatal("ListenAndServe:",err) } } 客户端代码websocket.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>go测试socket</title> </head> <body> <script type="text/javascript"> var sock = null; var wsuri = "ws://127.0.0.1:1234/websocket"; window.onload = function() { console.log("onload"); sock = new WebSocket(wsuri); sock.onopen = function() { console.log("connected to " + wsuri); } sock.onclose = function(e) { console.log("connection closed (" + e.code + ")"); } sock.onmessage = function(e) { console.log("message received: " + e.data); } }; function send() { var msg = document.getElementById(‘message‘).value; sock.send(msg); }; </script> <h1>WebSocket Echo Test</h1> <form> <p> Message: <input id="message" type="text" value="Hello,world!"> </p> </form> <button onclick="send();">Send Message</button> </body> </html> 测试启动服务端 $ ./server 启动浏览器 网络通信内容如图所示,首先加载页面,接着使用HTTP建立websocket连接,后续通信直接使用websocket进行。 点击 页面中SendMessage按钮 server端输出:
浏览器输出: 参考https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/08.2.md https://github.com/ukai/go-websocket-sample/blob/master/websocket_echo_sample.go (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |