http urls monitor.

tcp.go 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package tcp
  2. import (
  3. "os"
  4. "os/signal"
  5. "strings"
  6. "syscall"
  7. "time"
  8. "git.links123.net/links123.com/skeleton/cmd/tcp/router"
  9. "git.links123.net/links123.com/skeleton/service/store/cache"
  10. "git.links123.net/links123.com/skeleton/service/store/mysql"
  11. "github.com/sirupsen/logrus"
  12. "github.com/spf13/cobra"
  13. "github.com/wpajqz/linker"
  14. "github.com/wpajqz/linker/plugins"
  15. )
  16. // RunCommand cobra subcommand tcp
  17. func RunCommand() *cobra.Command {
  18. var host, port string
  19. cmd := &cobra.Command{
  20. Use: "tcp",
  21. Short: "Run the tcp service",
  22. Run: func(cmd *cobra.Command, args []string) {
  23. go Start(host, port)
  24. // 阻塞退出 捕获信号
  25. signalChan := make(chan os.Signal)
  26. signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
  27. logrus.Infof("caught signal %+v, begin garbage collection", <-signalChan)
  28. Stop()
  29. },
  30. }
  31. cmd.PersistentFlags().StringVarP(&host, "host", "o", "0.0.0.0", "server hostname")
  32. cmd.PersistentFlags().StringVarP(&port, "port", "p", "8081", "server port")
  33. return cmd
  34. }
  35. // Start use for cobra or testing
  36. func Start(host, port string) {
  37. // init db
  38. mysql.Init()
  39. // init cache
  40. cache.Init()
  41. // init server
  42. server := linker.NewServer(linker.Config{
  43. Timeout: 30 * time.Second,
  44. PluginForPacketSender: []linker.PacketPlugin{
  45. &plugins.Encryption{},
  46. &plugins.Debug{Sender: true},
  47. },
  48. PluginForPacketReceiver: []linker.PacketPlugin{
  49. &plugins.Decryption{},
  50. &plugins.Debug{Sender: false},
  51. },
  52. })
  53. // build router
  54. r := router.BuildRouter()
  55. server.BindRouter(r)
  56. // start server
  57. err := server.RunTCP("tcp", strings.Join([]string{host, port}, ":"))
  58. if err != nil {
  59. panic(err)
  60. }
  61. }
  62. // Stop stop the http service graceful
  63. func Stop() {
  64. // tcp server graceful shutdown missing
  65. cache.Close()
  66. mysql.Close()
  67. }