websocket.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. const _WEBSOCKET = {
  2. //是否打开连接
  3. isOpen: false,
  4. //连接socket. https://ask.dcloud.net.cn/question/74505
  5. connectSocket(url, recvMsgFunc = null, successFunc = null, errorFunc = null) {
  6. try {
  7. let that = this
  8. //监听socket连接
  9. uni.onSocketOpen((res) => {
  10. console.log('WebSocket连接已打开!', url, res)
  11. that.isOpen = true
  12. successFunc && successFunc(res)
  13. })
  14. //监听socket连接失败
  15. uni.onSocketError((res) => {
  16. that.isOpen = false
  17. console.log('WebSocket连接打开失败,请检查!', url, res)
  18. errorFunc && errorFunc(res)
  19. })
  20. //监听收到消息
  21. uni.onSocketMessage((res) => {
  22. console.log('收到服务器内容:' + res.data, url)
  23. //可结合服务端@OnOpen返回消息OK来进行判断是否已经打开连接
  24. if(res.data === 'OK') {
  25. console.log('WebSocket连接已打开!', url, res)
  26. that.isOpen = true
  27. successFunc && successFunc(res)
  28. return
  29. }
  30. recvMsgFunc && recvMsgFunc(res.data)
  31. })
  32. //监听socket关闭
  33. uni.onSocketClose((res) => {
  34. console.log('WebSocket 已关闭!', url)
  35. that.isOpen = false
  36. })
  37. //连接socket
  38. setTimeout(() => {
  39. // 防止还没监听到onSocketOpen就已经完成连接
  40. uni.connectSocket({
  41. url,
  42. success() {
  43. if (that.isOpen) {
  44. console.log('Websocket连接已打开,刷新状态完成!', url)
  45. } else {
  46. console.log('Websocket初始化成功!正在监听连接打开状态...', url)
  47. }
  48. }
  49. })
  50. }, 100)
  51. } catch (error) {
  52. console.log('err:' + error)
  53. }
  54. },
  55. //发送消息
  56. sendMessage(msg = '', successFunc = null, errorFunc = null) {
  57. if (!msg) {
  58. console.log('未传消息!')
  59. errorFunc && errorFunc('未传消息!')
  60. return
  61. }
  62. if (!this.isOpen) {
  63. console.log('连接未打开!')
  64. errorFunc && errorFunc('连接未打开!')
  65. return
  66. }
  67. uni.sendSocketMessage({
  68. data: msg,
  69. success(res) {
  70. console.log('消息发送成功!', msg)
  71. successFunc && successFunc(res)
  72. },
  73. fail(err) {
  74. console.log('消息发送失败!', msg)
  75. errorFunc && errorFunc(err)
  76. }
  77. })
  78. },
  79. //关闭连接
  80. closeSocket() {
  81. if (!this.isOpen) {
  82. return
  83. }
  84. //关闭socket连接
  85. uni.closeSocket()
  86. }
  87. }
  88. export default _WEBSOCKET