经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
Golang使用WebSocket通信的实现
来源:jb51  时间:2021/2/22 8:37:51  对本文有异议

使用Golang能够创建WebSocket通信,只需要使用golang.org/x/net/websocket包即可,该包有可能被墙,无法使用go get下载,但是我们可以从golang中国提供的地址下载,然后将包放在对应的路径下。

WebSocket是一种通信协议,旨在改善HTTP作为无状态协议通信的效率问题,WebSocket是客户端与服务器之间的全双工连接,客户端和服务器只需要建立一次连接就可以使用该连接进行通信。在我们的项目中,一般客户端是前端页面,使用JavaScript创建WebSocket与后端的WebSocket服务端进行通信。

下面首先看看我们的服务端代码

  1. package main
  2. import (
  3. "fmt"
  4. "html/template"
  5. "net/http"
  6. "os"
  7. "strings"
  8. "golang.org/x/net/websocket"
  9. )
  10. func upper(ws *websocket.Conn) {
  11. var err error
  12. for {
  13. var reply string
  14. if err = websocket.Message.Receive(ws, &reply); err != nil {
  15. fmt.Println(err)
  16. continue
  17. }
  18. if err = websocket.Message.Send(ws, strings.ToUpper(reply)); err != nil {
  19. fmt.Println(err)
  20. continue
  21. }
  22. }
  23. }
  24. func index(w http.ResponseWriter, r *http.Request) {
  25. if r.Method != "GET" {
  26. return
  27. }
  28. t, _ := template.ParseFiles("index.html")
  29. t.Execute(w, nil)
  30. }
  31. func main() {
  32. http.Handle("/upper", websocket.Handler(upper))
  33. http.HandleFunc("/", index)
  34. if err := http.ListenAndServe(":9999", nil); err != nil {
  35. fmt.Println(err)
  36. os.Exit(1)
  37. }
  38. }

我们从main函数看起,我们使用Golang的http包创建了一个Server,该Server能够处理两个请求,一个是/,这是Web项目的根路径,index函数作为处理方法,返回首页index.html。

Server还处理/upper请求,该请求的处理函数是一个WebSocket的处理函数,它包裹了我们自己定义的upper函数,upper函数有一个参数,就是服务端创建好的WebSocket连接,upper函数逻辑很简单,通过WebSocket连接读取服务器的请求内容,将内容转化为大写后,通过WebSocket将结果返回给客户端。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8"/>
  5. <title>Websocket</title>
  6. </head>
  7. <body>
  8. <h1>字符串转换大写</h1>
  9. <form>
  10. <p>
  11. 字符串: <input id="content" type="text" placeholder="输入要转换的字符串">
  12. </p>
  13. </form>
  14. <label id="result">结果为:</label><br><br>
  15. <button onclick="send()">转换</button>
  16. <script type="text/javascript">
  17. var sock = null;
  18. var wsuri = "ws://127.0.0.1:9999/upper";
  19. sock = new WebSocket(wsuri);
  20. sock.onmessage = function(e) {
  21. var result = document.getElementById('result');
  22. result.innerHTML = "结果为:" + e.data;
  23. }
  24. function send() {
  25. var msg = document.getElementById('content').value;
  26. sock.send(msg);
  27. }
  28. </script>
  29. </body>
  30. </html>

前端页面我们主要看JavaScript代码部分,首先建立一个全局的WebSocket,之后点击转换按钮时,就会将input的内容通过WebSocket发送出去。WebSocket的onmessage函数用来处理服务端的响应,还有onerror,onclose等方法,分别是WebSocket的错误回调和关闭回调,本文并没有使用,一般用来处理资源回收和报错。

Golang可以很方便的使用WebSocket,只是使用websocket.Handler包裹一个处理函数即可。

到此这篇关于Golang使用WebSocket通信的实现的文章就介绍到这了,更多相关Golang WebSocket通信内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号