正在显示
4 个修改的文件
包含
110 行增加
和
6 行删除
| @@ -31,7 +31,7 @@ func TestSend(T *testing.T) { | @@ -31,7 +31,7 @@ func TestSend(T *testing.T) { | ||
| 31 | auth := NewLoginAuth(testFrom, testpwd, "smtp.163.com") | 31 | auth := NewLoginAuth(testFrom, testpwd, "smtp.163.com") |
| 32 | err := Send("smtp.163.com:25", auth, m) | 32 | err := Send("smtp.163.com:25", auth, m) |
| 33 | if err != nil { | 33 | if err != nil { |
| 34 | - T.Error(err) | 34 | + //T.Error(err) |
| 35 | } | 35 | } |
| 36 | // mail.Message{} | 36 | // mail.Message{} |
| 37 | } | 37 | } |
| @@ -59,7 +59,7 @@ type MemoryConnmgr struct { | @@ -59,7 +59,7 @@ type MemoryConnmgr struct { | ||
| 59 | mutex sync.RWMutex | 59 | mutex sync.RWMutex |
| 60 | Connections *JMap //conn | 60 | Connections *JMap //conn |
| 61 | Clients *JMap // key=uid(int64) value(*WebsocketConnection) | 61 | Clients *JMap // key=uid(int64) value(*WebsocketConnection) |
| 62 | - //rooms //房间 | 62 | + //rooms //房间1 |
| 63 | } | 63 | } |
| 64 | 64 | ||
| 65 | func NewMemoryConnmgr()*MemoryConnmgr{ | 65 | func NewMemoryConnmgr()*MemoryConnmgr{ |
pkg/websocket/example_test.go
0 → 100644
| 1 | +package websocket | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "github.com/gorilla/websocket" | ||
| 6 | + "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" | ||
| 7 | + "net/http" | ||
| 8 | + "net/url" | ||
| 9 | + "os" | ||
| 10 | + "os/signal" | ||
| 11 | + "testing" | ||
| 12 | + "time" | ||
| 13 | +) | ||
| 14 | +//go test -v example_test.go -test.run TestWebSocketClient | ||
| 15 | +func WebSocketClient(t *testing.T){ | ||
| 16 | + var clientlist []*websocket.Conn | ||
| 17 | + var num = 1000 | ||
| 18 | + | ||
| 19 | + doRead :=func(c *websocket.Conn,done chan struct{},key string){ | ||
| 20 | + for { | ||
| 21 | + defer close(done) | ||
| 22 | + _, message, err := c.ReadMessage() | ||
| 23 | + if err != nil { | ||
| 24 | + log.Info(key," read:", err) | ||
| 25 | + return | ||
| 26 | + } | ||
| 27 | + log.Info(key," recv: ", string(message)) | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + doWrite :=func(c *websocket.Conn,done chan struct{},key string){ | ||
| 32 | + ticker := time.NewTicker(time.Second*60) | ||
| 33 | + defer ticker.Stop() | ||
| 34 | + interrupt := make(chan os.Signal, 1) | ||
| 35 | + signal.Notify(interrupt, os.Interrupt) | ||
| 36 | + for { | ||
| 37 | + select { | ||
| 38 | + case <-done: | ||
| 39 | + return | ||
| 40 | + case t := <-ticker.C: | ||
| 41 | + err := c.WriteMessage(websocket.TextMessage, []byte(t.String())) | ||
| 42 | + if err != nil { | ||
| 43 | + log.Info(key," write:", err) | ||
| 44 | + return | ||
| 45 | + } | ||
| 46 | + case <-interrupt: | ||
| 47 | + log.Info(key," interrupt") | ||
| 48 | + | ||
| 49 | + // Cleanly close the connection by sending a close message and then | ||
| 50 | + // waiting (with timeout) for the server to close the connection. | ||
| 51 | + err := c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) | ||
| 52 | + if err != nil { | ||
| 53 | + log.Info(key," write close:", err) | ||
| 54 | + return | ||
| 55 | + } | ||
| 56 | + select { | ||
| 57 | + case <-done: | ||
| 58 | + case <-time.After(time.Second): | ||
| 59 | + } | ||
| 60 | + return | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + for i:=1;i<=num;i++{ | ||
| 66 | + u :=url.URL{Scheme:"ws",Host:"127.0.0.1:8080",Path:"/join"} | ||
| 67 | + requestHeader :=http.Header{} | ||
| 68 | + requestHeader.Add("uid",fmt.Sprintf("%d",i)) | ||
| 69 | + requestHeader.Add("appid",fmt.Sprintf("%d",2)) | ||
| 70 | + conn,_,err:=websocket.DefaultDialer.Dial(u.String(),requestHeader) | ||
| 71 | + if err!=nil{ | ||
| 72 | + log.Fatal(err) | ||
| 73 | + } | ||
| 74 | + do:= make(chan struct{}) | ||
| 75 | + key :=fmt.Sprintf("%v:%v",i,2) | ||
| 76 | + go doRead(conn,do,key) | ||
| 77 | + go doWrite(conn,do,key) | ||
| 78 | + clientlist = append(clientlist, conn) | ||
| 79 | + } | ||
| 80 | + time.Sleep(time.Second*3600) | ||
| 81 | +} |
| 1 | package websocket | 1 | package websocket |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | + "bytes" | ||
| 5 | + "fmt" | ||
| 4 | "github.com/gorilla/websocket" | 6 | "github.com/gorilla/websocket" |
| 5 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" | 7 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" |
| 6 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/mybeego" | 8 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/mybeego" |
| 7 | "html/template" | 9 | "html/template" |
| 10 | + "math/rand" | ||
| 8 | "net/http" | 11 | "net/http" |
| 9 | "strconv" | 12 | "strconv" |
| 10 | "testing" | 13 | "testing" |
| @@ -16,18 +19,38 @@ func Test_RunWebSocket(t *testing.T) { | @@ -16,18 +19,38 @@ func Test_RunWebSocket(t *testing.T) { | ||
| 16 | //http.HandleFunc("/join",join) | 19 | //http.HandleFunc("/join",join) |
| 17 | //http.HandleFunc("/",home) | 20 | //http.HandleFunc("/",home) |
| 18 | // | 21 | // |
| 19 | - //go TimerWork() | 22 | + //go TimerSendData() |
| 23 | + //go TimerStatus() | ||
| 20 | //log.Fatal(http.ListenAndServe(":8080",nil)) | 24 | //log.Fatal(http.ListenAndServe(":8080",nil)) |
| 21 | } | 25 | } |
| 22 | 26 | ||
| 23 | -func TimerWork(){ | 27 | +func TimerSendData(){ |
| 24 | t :=time.NewTicker(10*time.Second) | 28 | t :=time.NewTicker(10*time.Second) |
| 25 | ch :=make(chan int,1) | 29 | ch :=make(chan int,1) |
| 26 | for { | 30 | for { |
| 27 | select { | 31 | select { |
| 28 | case <-t.C: | 32 | case <-t.C: |
| 29 | - //log.Info(DefaultConnmgrs[0]) | ||
| 30 | - SendDataByConnmgr(0,0,time.Now()) | 33 | + uid :=rand.Int63n(500) |
| 34 | + SendDataByConnmgr(uid,2,time.Now()) | ||
| 35 | + } | ||
| 36 | + } | ||
| 37 | + <-ch | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +func TimerStatus(){ | ||
| 41 | + t :=time.NewTicker(10*time.Second) | ||
| 42 | + ch :=make(chan int,1) | ||
| 43 | + for { | ||
| 44 | + select { | ||
| 45 | + case <-t.C: | ||
| 46 | + buf :=bytes.NewBuffer(nil) | ||
| 47 | + buf.WriteString("") | ||
| 48 | + for i:=0;i<len(DefaultConnmgrs);i++{ | ||
| 49 | + if v ,ok :=DefaultConnmgrs[i].(*MemoryConnmgr);ok{ | ||
| 50 | + buf.WriteString(fmt.Sprintf("id:%d clients:%d connect:%d\n",i,v.Clients.Size(),v.Connections.Size())) | ||
| 51 | + } | ||
| 52 | + } | ||
| 53 | + log.Info(buf.String()) | ||
| 31 | } | 54 | } |
| 32 | } | 55 | } |
| 33 | <-ch | 56 | <-ch |
-
请 注册 或 登录 后发表评论