Skip to content

qianlnk/longsocket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

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)
	}
}

About

websocket long connect

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages