Explorar o código

修改websocket

renzheng %!s(int64=7) %!d(string=hai) anos
pai
achega
2a0fbff360
Modificáronse 2 ficheiros con 37 adicións e 56 borrados
  1. 32 50
      src/jfw/front/websocket.go
  2. 5 6
      src/main.go

+ 32 - 50
src/jfw/front/websocket.go

@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"log"
-	"net/http"
+	//"net/http"
 	qutil "qfw/util"
 	"qfw/util/redis"
 	"strings"
@@ -13,14 +13,9 @@ import (
 
 	"github.com/go-xweb/httpsession"
 	"github.com/go-xweb/xweb"
-	"github.com/gorilla/websocket"
+	"golang.org/x/net/websocket"
 )
 
-var upgrader = websocket.Upgrader{
-	ReadBufferSize:  1024,
-	WriteBufferSize: 1024,
-}
-
 //socket对象放在内存中,待rpc回调使用
 type Wss struct {
 	Conn *websocket.Conn
@@ -100,7 +95,7 @@ func GetWsByCode(param []string) bool {
 		infoData := LoginInfo(src, openid, wss.Conn.Sess)
 		log.Println(infoData)
 		sendmessage, _ := json.Marshal(infoData)
-		if err := wss.Conn.WriteMessage(websocket.TextMessage, sendmessage); err != nil {
+		if err := websocket.Message.Send(wss.Conn, sendmessage); err != nil {
 			log.Println("socket send fail..", err)
 			return false
 		} else {
@@ -146,64 +141,51 @@ func LoginInfo(shareid, openid string, Sess interface{}) (infoData map[string]in
 }
 
 //登录关注
-func ServeWss(w http.ResponseWriter, r *http.Request) {
+func ServeWss(conn *websocket.Conn) {
 	defer qutil.Catch()
-	conn, err := upgrader.Upgrade(w, r, nil)
-	conn.Sess = xweb.RootApp().SessionManager.Session(r, w)
+	conn.Sess = xweb.RootApp().SessionManager.Session(conn.R, conn.W)
 	var shareIds string
-	if err == nil {
-		for {
-			_, shareData, err := conn.ReadMessage()
-			log.Println("========wait", string(shareData))
-			if err != nil {
-				//log.Println("前台socket关闭,后台socket断开并退出循环。。。。")
-				break
-			} else {
-				//心跳监测
-				if string(shareData) == "HeartBeat" {
-					log.Println("send...", string(shareData))
-					conn.WriteMessage(websocket.TextMessage, []byte("\"HeartBeat\""))
-					continue
-				}
-				shareIds = string(shareData)
-				shareidlist := strings.Split(shareIds, "___")
-				if shareIds != "" && len(shareidlist) > 1 {
-					shareidnum := shareidlist[0]
-					shareidkop := shareidlist[1]
-					log.Println(se.DecodeString(shareidnum), se.DecodeString(shareidkop))
-					PutWsByCode(se.DecodeString(shareidnum), conn)
-					PutWsByCode(se.DecodeString(shareidkop), conn)
-					conn.WriteMessage(websocket.TextMessage, []byte("\"ok\""))
-				}
+	for {
+		var shareData string
+		err := websocket.Message.Receive(conn, &shareData)
+		if err != nil {
+			//log.Println("前台socket关闭,后台socket断开并退出循环。。。。")
+			break
+		} else {
+			//心跳监测
+			if shareData == "HeartBeat" {
+				log.Println("send...", string(shareData))
+				websocket.Message.Send(conn, "HeartBeat")
+				continue
+			}
+			shareIds = shareData
+			shareidlist := strings.Split(shareIds, "___")
+			if shareIds != "" && len(shareidlist) > 1 {
+				shareidnum := shareidlist[0]
+				shareidkop := shareidlist[1]
+				log.Println(se.DecodeString(shareidnum), se.DecodeString(shareidkop))
+				PutWsByCode(se.DecodeString(shareidnum), conn)
+				PutWsByCode(se.DecodeString(shareidkop), conn)
+				websocket.Message.Send(conn, "ok")
 			}
 		}
 	}
+
 }
 
 //实验室
-func QrToLabWss(w http.ResponseWriter, r *http.Request) {
+func QrToLabWss(conn *websocket.Conn) {
 	defer qutil.Catch()
-	conn, err := upgrader.Upgrade(w, r, nil)
-	if err != nil {
-		log.Println(err)
-		return
-	}
-	if conn == nil {
-		return
-	}
 	var receive, userId string
 	var qrToLab_ok, qrToLab_open_ok bool
 	//接收消息
 	go func() {
 		defer qutil.Catch()
 		for {
-			//err := websocket.Message.Receive(ws, &receive)
-			_, msgData, err := conn.ReadMessage()
-			//log.Println(string(msgData), "---msgData---:", msgData)
-			receive = string(msgData)
+			err := websocket.Message.Receive(conn, &receive)
 			if err != nil {
 				receive = "close"
-				//log.Println("websocket接收失败!", err)
+				log.Println("websocket接收失败!", err)
 				return
 			}
 			if receive == "close" {
@@ -241,7 +223,7 @@ func QrToLabWss(w http.ResponseWriter, r *http.Request) {
 			continue
 		}
 		sendmessage, _ := json.Marshal(reply)
-		if err := conn.WriteMessage(websocket.TextMessage, sendmessage); err != nil {
+		if err := websocket.Message.Send(conn, sendmessage); err != nil {
 			redis.Del("other", "qrToLab_"+userId)
 			redis.Del("other", "qrToLab_open_"+userId)
 			//log.Println("websocket发送失败!", err)

+ 5 - 6
src/main.go

@@ -20,7 +20,7 @@ import (
 
 	"github.com/go-xweb/httpsession"
 	"github.com/go-xweb/xweb"
-	//"golang.org/x/net/websocket"
+	"golang.org/x/net/websocket"
 )
 
 func init() {
@@ -64,11 +64,10 @@ func main() {
 			xweb.RunTLS(":"+Sysconfig["webport"].(string), config)
 		*/
 		mux1 := http.NewServeMux()
-
-		//mux1.Handle("/ws", websocket.Handler(front.ServeWs))
-		mux1.HandleFunc("/ws", front.ServeWss)
-		//mux1.Handle("/qrToLab", websocket.Handler(front.QrToLab))
-		mux1.HandleFunc("/qrToLab", front.QrToLabWss)
+		mux1.Handle("/ws", websocket.Handler(front.ServeWss))
+		//mux1.HandleFunc("/ws", front.ServeWss)
+		mux1.Handle("/qrToLab", websocket.Handler(front.QrToLabWss))
+		//mux1.HandleFunc("/qrToLab", front.QrToLabWss)
 		xweb.RunBase(":"+Sysconfig["webport"].(string), mux1)
 		//xweb.Run(":" + Sysconfig["webport"].(string))
 	}()