易云轻量版服务端
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

119 řádky
2.6 KiB

  1. package websocket
  2. import (
  3. "encoding/json"
  4. "github.com/gorilla/websocket"
  5. "locking-kit-server/handler"
  6. "log"
  7. "net/http"
  8. )
  9. /**
  10. * @author yuanrh
  11. * @description http转websocket协议
  12. * @date 2021/6/28 11:11
  13. **/
  14. var(
  15. upgrader = websocket.Upgrader{
  16. //允许跨域访问
  17. CheckOrigin: func(r *http.Request) bool {
  18. return true
  19. },
  20. }
  21. )
  22. //订阅同步任务
  23. func SubscriptionTaskSyncHandler(w http.ResponseWriter, r *http.Request){
  24. //w.Write([]byte("hello"))
  25. //收到http请求(upgrade),完成websocket协议转换
  26. //在应答的header中放上upgrade:websoket
  27. var (
  28. conn *websocket.Conn
  29. err error
  30. //msgType int
  31. //data []byte
  32. )
  33. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  34. //报错了,直接返回底层的websocket链接就会终断掉
  35. return
  36. }
  37. //得到了websocket.Conn长连接的对象,实现数据的收发
  38. for {
  39. //Text(json), Binary
  40. //if _, data, err = conn.ReadMessage(); err != nil {
  41. if _, _, err = conn.ReadMessage(); err != nil {
  42. log.Println(err)
  43. //报错关闭websocket
  44. goto ERR
  45. }
  46. //发送数据,判断返回值是否报错
  47. //log.Println("param subscriptionFileChangeHandler:"+string(data))
  48. err = handler.SubscriptionTaskSyncHandler(conn)
  49. if err != nil {
  50. //报错了
  51. log.Println(err)
  52. goto ERR
  53. }
  54. }
  55. //error的标签
  56. ERR:
  57. conn.Close()
  58. }
  59. //订阅同步任务
  60. func SubscriptionMessageNotifyHandler(w http.ResponseWriter, r *http.Request){
  61. //w.Write([]byte("hello"))
  62. //收到http请求(upgrade),完成websocket协议转换
  63. //在应答的header中放上upgrade:websoket
  64. var (
  65. conn *websocket.Conn
  66. err error
  67. //msgType int
  68. //data []byte
  69. )
  70. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  71. //报错了,直接返回底层的websocket链接就会终断掉
  72. return
  73. }
  74. //得到了websocket.Conn长连接的对象,实现数据的收发
  75. for {
  76. //Text(json), Binary
  77. //if _, data, err = conn.ReadMessage(); err != nil {
  78. if _, _, err = conn.ReadMessage(); err != nil {
  79. log.Println(err)
  80. //报错关闭websocket
  81. goto ERR
  82. }
  83. //发送数据,判断返回值是否报错
  84. //log.Println("param subscriptionFileChangeHandler:"+string(data))
  85. //监听消息
  86. go func() {
  87. handler.ListeningRemoteMessage()
  88. }()
  89. for message := range handler.MessageToWebChanel {
  90. data,err := json.Marshal(message)
  91. if err !=nil{
  92. log.Print(err)
  93. goto ERR
  94. }
  95. if err := conn.WriteMessage(websocket.TextMessage, data); err != nil {
  96. log.Printf("监听同步任务失败,%v", err)
  97. goto ERR
  98. }
  99. }
  100. if err != nil {
  101. //报错了
  102. log.Println(err)
  103. goto ERR
  104. }
  105. goto ERR
  106. }
  107. //error的标签
  108. ERR:
  109. conn.Close()
  110. }