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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |