socketTask.lua 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. --- 模块功能:socket ssl长连接功能测试.
  2. -- 与服务器连接成功后
  3. --
  4. -- 每隔20秒钟发送一次HTTP GET报文到服务器
  5. --
  6. -- 与服务器断开连接后,会自动重连
  7. -- @author openLuat
  8. -- @module socketSslLongConnection.socketTask
  9. -- @license MIT
  10. -- @copyright openLuat
  11. -- @release 2018.03.27
  12. module(...,package.seeall)
  13. require"socket"
  14. require"socketOutMsg"
  15. require"socketInMsg"
  16. require"ntp"
  17. local ready = false
  18. --- socket连接是否处于激活状态
  19. -- @return 激活状态返回true,非激活状态返回false
  20. -- @usage socketTask.isReady()
  21. function isReady()
  22. return ready
  23. end
  24. --同步网络时间,因为证书校验时会用到系统时间
  25. ntp.timeSync()
  26. --启动socket客户端任务
  27. sys.taskInit(
  28. function()
  29. --单向认证测试时,此变量设置为false;双向认证测试时,此变量设置为true
  30. local mutualAuth = false
  31. local socketClient,connectResult
  32. local retryConnectCnt = 0
  33. while true do
  34. if not socket.isReady() then
  35. retryConnectCnt = 0
  36. --等待网络环境准备就绪,超时时间是5分钟
  37. sys.waitUntil("IP_READY_IND",300000)
  38. end
  39. if socket.isReady() then
  40. --双向认证测试
  41. if mutualAuth then
  42. --创建一个socket ssl tcp客户端
  43. socketClient = socket.tcp(true,{caCert="ca.crt",clientCert="client.crt",clientKey="client.key"})
  44. --阻塞执行socket connect动作,直至成功
  45. connectResult = socketClient:connect("36.7.87.100","4434")
  46. --单向认证测试
  47. else
  48. --创建一个socket ssl tcp客户端
  49. socketClient = socket.tcp(true,{caCert="ca.crt"})
  50. --阻塞执行socket connect动作,直至成功
  51. connectResult = socketClient:connect("36.7.87.100","4433")
  52. end
  53. if connectResult then
  54. retryConnectCnt = 0
  55. ready = true
  56. socketOutMsg.init()
  57. --循环处理接收和发送的数据
  58. while true do
  59. if not socketInMsg.proc(socketClient) then log.error("socketTask.socketInMsg.proc error") break end
  60. if not socketOutMsg.proc(socketClient) then log.error("socketTask.socketOutMsg proc error") break end
  61. end
  62. socketOutMsg.unInit()
  63. ready = false
  64. else
  65. retryConnectCnt = retryConnectCnt+1
  66. end
  67. --断开socket连接
  68. socketClient:close()
  69. if retryConnectCnt>=5 then link.shut() retryConnectCnt=0 end
  70. sys.wait(5000)
  71. else
  72. --进入飞行模式,20秒之后,退出飞行模式
  73. net.switchFly(true)
  74. sys.wait(20000)
  75. net.switchFly(false)
  76. end
  77. end
  78. end
  79. )