使用Golang能够创建WebSocket通信,只需要使用golang.org/x/net/websocket包即可,该包有可能被墙,无法使用go get下载,但是我们可以从golang中国提供的地址下载,然后将包放在对应的路径下。
WebSocket是一种通信协议,旨在改善HTTP作为无状态协议通信的效率问题,WebSocket是客户端与服务器之间的全双工连接,客户端和服务器只需要建立一次连接就可以使用该连接进行通信。在我们的项目中,一般客户端是前端页面,使用JavaScript创建WebSocket与后端的WebSocket服务端进行通信。
下面首先看看我们的服务端代码
package main import ( "fmt" "html/template" "net/http" "os" "strings" "golang.org/x/net/websocket" ) func upper(ws *websocket.Conn) { var err error for { var reply string if err = websocket.Message.Receive(ws, &reply); err != nil { fmt.Println(err) continue } if err = websocket.Message.Send(ws, strings.ToUpper(reply)); err != nil { fmt.Println(err) continue } } } func index(w http.ResponseWriter, r *http.Request) { if r.Method != "GET" { return } t, _ := template.ParseFiles("index.html") t.Execute(w, nil) } func main() { http.Handle("/upper", websocket.Handler(upper)) http.HandleFunc("/", index) if err := http.ListenAndServe(":9999", nil); err != nil { fmt.Println(err) os.Exit(1) } }
我们从main函数看起,我们使用Golang的http包创建了一个Server,该Server能够处理两个请求,一个是/,这是Web项目的根路径,index函数作为处理方法,返回首页index.html。
Server还处理/upper请求,该请求的处理函数是一个WebSocket的处理函数,它包裹了我们自己定义的upper函数,upper函数有一个参数,就是服务端创建好的WebSocket连接,upper函数逻辑很简单,通过WebSocket连接读取服务器的请求内容,将内容转化为大写后,通过WebSocket将结果返回给客户端。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>Websocket</title> </head> <body> <h1>字符串转换大写</h1> <form> <p> 字符串: <input id="content" type="text" placeholder="输入要转换的字符串"> </p> </form> <label id="result">结果为:</label><br><br> <button onclick="send()">转换</button> <script type="text/javascript"> var sock = null; var wsuri = "ws://127.0.0.1:9999/upper"; sock = new WebSocket(wsuri); sock.onmessage = function(e) { var result = document.getElementById('result'); result.innerHTML = "结果为:" + e.data; } function send() { var msg = document.getElementById('content').value; sock.send(msg); } </script> </body> </html>
前端页面我们主要看JavaScript代码部分,首先建立一个全局的WebSocket,之后点击转换按钮时,就会将input的内容通过WebSocket发送出去。WebSocket的onmessage函数用来处理服务端的响应,还有onerror,onclose等方法,分别是WebSocket的错误回调和关闭回调,本文并没有使用,一般用来处理资源回收和报错。
Golang可以很方便的使用WebSocket,只是使用websocket.Handler包裹一个处理函数即可。
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]