package ws import ( websocket1 "github.com/gorilla/websocket" "github.com/kataras/iris/v12/websocket" "github.com/kataras/neffos" "github.com/sirupsen/logrus" "net/http" "strconv" ) func checkOrigin(_ *http.Request) bool { return true } func PopItem(l []string, item string) []string { var tmp []string for _, v := range l { if v == item { continue } else { tmp = append(tmp, v) } } return tmp } func SetupWebsocket() *neffos.Server { Upgrader := websocket1.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, CheckOrigin: checkOrigin, } var userList []string ws := websocket.New(websocket.GorillaUpgrader(Upgrader), websocket.Events{ websocket.OnNativeMessage: func(conn *websocket.NSConn, message websocket.Message) error { mg := websocket.Message{ Body: []byte(strconv.Itoa(len(userList))), IsNative: true, } conn.Conn.Write(mg) return nil }, }) ws.OnConnect = func(c *websocket.Conn) error { userList = append(userList, c.ID()) mg := websocket.Message{ Body: []byte(strconv.Itoa(len(userList))), IsNative: true, } c.Write(mg) for _, cli := range ws.GetConnections() { cli.Write(mg) } return nil } ws.OnDisconnect = func(c *websocket.Conn) { userList = PopItem(userList, c.ID()) mg := websocket.Message{ Body: []byte(strconv.Itoa(len(userList))), IsNative: true, } for _, cli := range ws.GetConnections() { cli.Write(mg) } } ws.OnUpgradeError = func(err error) { logrus.Errorln("ws初始化失败:", err) } return ws }