forked from Allenxuxu/gev
/
server.go
72 lines (56 loc) 路 1.6 KB
/
server.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package main
import (
"flag"
"strconv"
"github.com/nm-morais/gev/log"
"github.com/nm-morais/gev"
"github.com/nm-morais/gev/connection"
"github.com/nm-morais/gev/plugins/websocket"
"github.com/nm-morais/gev/plugins/websocket/ws"
)
type example struct {
}
// connection lifecycle
// OnConnect() -> OnRequest() -> OnHeader() -> OnMessage() -> OnClose()
func (s *example) OnConnect(c *connection.Connection) {
//log.Println("OnConnect: ", c.PeerAddr())
}
func (s *example) OnMessage(c *connection.Connection, data []byte) (messageType ws.MessageType, out []byte) {
//log.Println("OnMessage: ", string(data))
messageType = ws.MessageBinary
out = data
return
}
func (s *example) OnClose(c *connection.Connection) {
//log.Println("123 OnClose", c.PeerAddr())
}
// NewWebSocketServer 鍒涘缓 WebSocket Server
func NewWebSocketServer(handler websocket.WSHandler, u *ws.Upgrader, opts ...gev.Option) (server *gev.Server, err error) {
opts = append(opts, gev.Protocol(websocket.New(u)))
return gev.NewServer(websocket.NewHandlerWrap(u, handler), opts...)
}
func main() {
log.SetLevel(log.LevelDebug)
var (
port int
loops int
)
flag.IntVar(&port, "port", 1833, "server port")
flag.IntVar(&loops, "loops", -1, "num loops")
flag.Parse()
handler := &example{}
wsUpgrader := &ws.Upgrader{}
//wsUpgrader.OnRequest = func(c *connection.Connection, uri []byte) error {
// log.Println("OnRequest: ", string(uri))
//
// return nil
//}
s, err := NewWebSocketServer(handler, wsUpgrader,
gev.Network("tcp"),
gev.Address(":"+strconv.Itoa(port)),
gev.NumLoops(loops))
if err != nil {
panic(err)
}
s.Start()
}