经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
Golang websocket 实现消息推送
来源:cnblogs  作者:南方有嘉木1993  时间:2020/11/16 10:27:46  对本文有异议

服务端实现

  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "net/http"
  7. "golang.org/x/net/websocket"
  8. )
  9. func add(ws *websocket.Conn) {
  10. msg := make([]byte, 512)
  11. n, err := ws.Read(msg)
  12. if err != nil {
  13. log.Fatal(err)
  14. }
  15. fmt.Printf("Receive: %s\n", msg[:n])
  16. sendMsg := "订单添加:" + string(msg[:n])
  17. _, err = ws.Write([]byte(sendMsg))
  18. if err != nil {
  19. log.Fatal(err)
  20. }
  21. fmt.Printf("Send: %s\n", sendMsg)
  22. }
  23. func del(ws *websocket.Conn) {
  24. var msg string
  25. err := websocket.Message.Receive(ws, &msg)
  26. if err != nil {
  27. log.Fatal(err)
  28. }
  29. fmt.Printf("Receive: %s\n", msg)
  30. sendMsg := "订单删除:" + msg
  31. err = websocket.Message.Send(ws, sendMsg)
  32. if err != nil {
  33. log.Fatal(err)
  34. }
  35. fmt.Printf("Send: %s\n", sendMsg)
  36. }
  37. func main() {
  38. http.Handle("/add", websocket.Handler(add))
  39. http.Handle("/del", websocket.Handler(del))
  40. fmt.Println("开始监听8888端口...")
  41. err := http.ListenAndServe(":8888", nil)
  42. if err != nil {
  43. log.Fatal(err)
  44. }
  45. }

客户端实现

  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "golang.org/x/net/websocket"
  7. )
  8. func add(param string) {
  9. ws, err := websocket.Dial("ws://127.0.0.1:8888/add", "", "http://127.0.0.1:8888/")
  10. if err != nil {
  11. log.Fatal(err)
  12. }
  13. defer ws.Close() //关闭连接
  14. sendMsg := []byte(param)
  15. _, err = ws.Write(sendMsg)
  16. if err != nil {
  17. log.Fatal(err)
  18. }
  19. fmt.Printf("Send: %s\n", string(sendMsg))
  20. msg := make([]byte, 512)
  21. m, err := ws.Read(msg)
  22. if err != nil {
  23. log.Fatal(err)
  24. }
  25. fmt.Printf("Receive: %s\n", msg[:m])
  26. }
  27. func del(param string) {
  28. ws, err := websocket.Dial("ws://127.0.0.1:8888/del", "", "http://127.0.0.1:8888/")
  29. if err != nil {
  30. log.Fatal(err)
  31. }
  32. defer ws.Close() //关闭连接
  33. sendMsg := param
  34. err = websocket.Message.Send(ws, sendMsg)
  35. if err != nil {
  36. log.Fatal(err)
  37. }
  38. fmt.Printf("Send: %s\n", sendMsg)
  39. var msg string
  40. err = websocket.Message.Receive(ws, &msg)
  41. if err != nil {
  42. log.Fatal(err)
  43. }
  44. fmt.Printf("Receive: %s\n", msg)
  45. }
  46. func main() {
  47. add("小龙虾")
  48. add("鱼香肉丝")
  49. del("小龙虾")
  50. }

测试

启动服务端代码:
在这里插入图片描述
运行客户端代码:
在这里插入图片描述

服务端逻辑处理:
在这里插入图片描述
这里客户端是用后端代码实现,当需要前端页面与服务端进行交互时,可以将客户端改成页面请求调用,收到消息后显示即可。

公众号:李田路口

 

原文链接:http://www.cnblogs.com/dubinyang/p/13977392.html

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

本站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号