longsocket
longsocket copied to clipboard
websocket long connect
longsocket
websocket long connect
use
server
do some thing in func testdealmsg and return message by func Write.
func testHander(ws *websocket.Conn) {
req := ws.Request()
fmt.Println(req)
u, err := url.Parse(req.Header.Get("Origin"))
if err != nil {
ws.Close()
return
}
user := u.Query().Get("user")
password := u.Query().Get("password")
fmt.Println(user, password)
mysocket := longsocket.NewConn("", "", "", true, 128*1024)
mysocket.SetSocket(ws)
defer mysocket.Close()
go mysocket.WriteLoop()
go mysocket.ReadLoop()
mysocket.Read(testdealmsg)
}
func testdealmsg(msg []byte, l *longsocket.Longsocket) error {
fmt.Println(string(msg))
return nil
}
func main() {
http.Handle("/test", websocket.Handler(testHander))
// initialize server
srv := &http.Server{
Addr: ":1234",
Handler: nil,
ReadTimeout: time.Duration(5) * time.Minute,
WriteTimeout: time.Duration(5) * time.Minute,
MaxHeaderBytes: 1 << 20,
}
// start listen
err := srv.ListenAndServe()
if err != nil {
fmt.Println(err)
return
}
}
client
keep long connect by func keeplongconnect with gorouting. and send message to server by func Write. deal server's res message in func testdealmsg, at the same time, you can send message to server also.
var mysocket *longsocket.Longsocket
func testdealmsg(msg []byte, l *longsocket.Longsocket) error {
fmt.Println(string(msg))
return nil
}
func keeplongconnect() {
for {
wsAddr := fmt.Sprintf("ws://127.0.0.1:1234/test")
httpAddr := fmt.Sprintf("http://127.0.0.1:1234/test?user=%s&pwd=%s", "qianlnk", "123456")
mysocket = longsocket.NewConn(wsAddr, "", httpAddr, true, 128*1024)
err := mysocket.Dial(true)
if err != nil {
fmt.Println("err:", err)
continue
}
defer mysocket.Close()
go mysocket.WriteLoop()
go mysocket.ReadLoop()
mysocket.Read(testdealmsg)
time.Sleep(2 * time.Second)
}
}
func main() {
go keeplongconnect()
time.Sleep(2 * time.Second) //wait for connect
for {
mysocket.Write([]byte("test"))
time.Sleep(2 * time.Second)
}
}