大佬教程收集整理的这篇文章主要介绍了golang websocket 入门,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
package main
import (
"net/http"
)
func main() {
http.HandleFunc("/",func(w http.ResponseWriter,r *http.request) {
w.Write([]byte("Hello world"))
})
http.ListenAndServe(":9000",nil)
}
上面的太简单,就是一个http的服务,启动打开浏览器就可以输出Hello world了,这是http,每次一个请求一个返回,虽然http的1.1版本已经支持keep-alive了,但如果想从服务发送到客户端,还是不行的,那么就诞生了websocket了。
现在改进一下代码:
package main
import (
"net/http"
"github.com/gorilla/websocket"
"fmt"
)
var upgrade = websocket.Upgrader{}
func main() {
http.HandleFunc("/",r *http.request) {
w.Write([]byte("Hello world"))
})
http.HandleFunc("/v1/ws",r *http.request) {
conn,_ := upgrade.Upgrade(w,r,nil)
go func(conn *websocket.Conn) {
for{
//mtype :Textmessage=1/Binarymessage=-2/Closemessage=8/Pingmessage=9/Pongmessage=10
mtype,msg,_:=conn.Readmessage()
switch mtype {
case 1:
conn.Writemessage(mtype,msg)
case 8:
fmt.Println("close")
}
}
}(conn)
})
http.ListenAndServe(":9000",nil)
}
这个里面如果请求的是v1/ws的话就进入websocket的,就是把用户的输入当做输出,返回到客户端。下面通过浏览器console测试一下
var ws = new WebSocket("ws://127.0.0.1:9000/v1/ws")
ws.addEventListener("message",function(E){console.log(E);});
ws.send("123")
运行一下就可以看到效果。当然,如果你不想返回,只是在后端输出一下
@H_546_2@mtype,_:=conn.Readmessage() fmt.Println(mtype,":",String(msg))那么前端就收不到任何返回。
进一步,那么如何后端推送呢,
http.HandleFunc("/v1/ws",func(w http.ResponseWriter,r *http.request) {
conn,_ := upgrade.Upgrade(w,nil)
go func(conn *websocket.Conn) {
ch :=time.Tick(5*time.Second)
for range ch{
fmt.Println("call")
conn.Writemessage(1,[]byte("abc"))
}
}(conn)
})
这样只要前端绑定了这个message就可以定时收到后端的推送了。但是如果前端关闭ws.close()将不会收到推送了。
在结束这篇blog之前还要补充一点就是服务关闭,如果前端关闭,后端任然继续读取数据将会报错panic: repeated read on Failed websocket connection。因为无法读取到客户端的数据了。所以还要在第一个例子的地方@L_874_16@一个异常处理
第一篇入门就和大家分享到这来
以上是大佬教程为你收集整理的golang websocket 入门全部内容,希望文章能够帮你解决golang websocket 入门所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。