ws-client-test.go 949 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "github.com/gorilla/websocket"
  6. "os"
  7. "os/signal"
  8. "syscall"
  9. )
  10. var URL string
  11. func main() {
  12. flag.StringVar(&URL, "u", "", "URL to connect")
  13. flag.Parse()
  14. c, _, err := websocket.DefaultDialer.Dial(URL, nil)
  15. if err != nil {
  16. fmt.Println("failed dial ws: ", err)
  17. return
  18. }
  19. chSIGINT := make(chan os.Signal, 1)
  20. chError := make(chan error, 1)
  21. signal.Notify(chSIGINT, syscall.SIGINT)
  22. go func() {
  23. for {
  24. _, dat, err := c.ReadMessage()
  25. if err != nil {
  26. chError <- fmt.Errorf("error reading websocket message: %s", err.Error())
  27. return
  28. }
  29. fmt.Print(string(dat))
  30. }
  31. }()
  32. select {
  33. case <-chSIGINT:
  34. fmt.Println()
  35. fmt.Println("gotun-rlog abort by user Ctrl+C.")
  36. err := c.Close()
  37. if err != nil {
  38. fmt.Println("failed close websocket connection:", err.Error())
  39. }
  40. return
  41. case err := <-chError:
  42. if err != nil {
  43. fmt.Println("websocket error: ", err.Error())
  44. }
  45. return
  46. }
  47. }