gatewayServer.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package gatewayServer
  2. import (
  3. "fmt"
  4. "github.com/sirupsen/logrus"
  5. "io"
  6. "lcfns/global"
  7. "log"
  8. "net"
  9. "sync/atomic"
  10. )
  11. var ipAddress = global.Config.Foreign.GatewayServer
  12. var ConnMap = make(map[string]net.Conn, 50)
  13. var openDebug bool = false
  14. func GatewayServe() {
  15. listen, err := net.Listen("tcp", ipAddress)
  16. if err != nil {
  17. log.Fatalln("服务启动失败 ", err)
  18. }
  19. for {
  20. accept, err := listen.Accept()
  21. if err != nil {
  22. log.Fatalln("获取连接失败 ", err)
  23. }
  24. go handleConn(accept)
  25. }
  26. }
  27. var n int32
  28. func handleConn(c net.Conn) {
  29. defer func() {
  30. atomic.AddInt32(&n, -1)
  31. //gs := service.ServiceGroupApp.AppServiceGroup.GatewayService
  32. //gs.UpdateState()
  33. }()
  34. atomic.AddInt32(&n, 1)
  35. fmt.Printf("连接数 %d\n", atomic.LoadInt32(&n))
  36. fmt.Printf("当前连接 %s\n", c.RemoteAddr())
  37. //var filterChan = make(chan []byte, 32)
  38. var dataChan = make(chan []byte, 32)
  39. readData := func() {
  40. for {
  41. var buf = make([]byte, 1024)
  42. n, err := c.Read(buf)
  43. if err != nil {
  44. if err == io.EOF {
  45. logrus.Println("已到达文件结束")
  46. break
  47. }
  48. logrus.Println("读数据失败", err)
  49. break
  50. }
  51. if n == 0 {
  52. logrus.Println("未读取到数据")
  53. break
  54. }
  55. dataChan <- buf[:n]
  56. }
  57. }
  58. //filterData := func() {
  59. //
  60. //}
  61. handleData := func() {
  62. for {
  63. v, ok := <-dataChan
  64. if !ok {
  65. return
  66. }
  67. adu := UnPack(v)
  68. c.RemoteAddr()
  69. ParseAndResponse(adu, c)
  70. }
  71. }
  72. go readData()
  73. go handleData()
  74. }