websocket.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "net/http"
  6. "time"
  7. "github.com/gin-gonic/gin"
  8. "github.com/google/uuid"
  9. "github.com/gorilla/websocket"
  10. "sikey.com/websocket/config"
  11. "sikey.com/websocket/repositories"
  12. "sikey.com/websocket/server"
  13. "sikey.com/websocket/utils/mysqlx"
  14. "sikey.com/websocket/utils/zlog"
  15. )
  16. var configFile = flag.String("f", "./etc/websocket.toml", "the config file")
  17. func main() {
  18. flag.Parse()
  19. config.MustLoadConfig(*configFile)
  20. // Zaplog init
  21. zlog.WithZapLogger(zlog.NewLogger(config.MustLoadLogger()))
  22. app := newApp()
  23. app.Run(fmt.Sprintf(":%d", config.Config.Port))
  24. }
  25. func newApp() *gin.Engine {
  26. app := gin.Default()
  27. // 创建 Websocket 横向拓展应用
  28. // exc := stackexchange.NewStackExchange(
  29. // config.Kafka.Brokers,
  30. // config.Kafka.Topic,
  31. // config.Kafka.Partition,
  32. // config.Kafka.MaxBytes,
  33. // )
  34. srv := &server.Server{
  35. Upgrader: websocket.Upgrader{
  36. ReadBufferSize: 1024,
  37. WriteBufferSize: 1024,
  38. CheckOrigin: func(r *http.Request) bool {
  39. return true
  40. },
  41. },
  42. WriteWait: 10 * time.Second,
  43. ReadWait: 10 * time.Second,
  44. PingWait: 120 * time.Second,
  45. Hub: server.NewHub(server.HubConfig{
  46. ServerId: uuid.NewString(),
  47. ConnectSize: 1024,
  48. DisconnectSize: 1024,
  49. MessageSize: 125,
  50. }),
  51. Repositories: repositories.NewRepositories(mysqlx.ConnectMysql()),
  52. }
  53. app.GET("/websocket/endpoint", func(ctx *gin.Context) { server.WebsocketHandler(ctx, srv) })
  54. return app
  55. }