index.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <meta content="在线WebSocket物联网开发调试测试工具" name="description">
  8. <meta content="websocket ws wss 在线测试 调试 工具 物联网" name="keywords">
  9. <!-- 样式表 -->
  10. <link rel="stylesheet" href="css/bootstrap.min.css">
  11. <link rel="stylesheet" href="https://static.wildfirechat.cn/static/animate.min.css">
  12. <link rel="stylesheet" href="css/wstool.css">
  13. <link rel="stylesheet" href="https://static.wildfirechat.cn/static/qtcreator_light.min.css">
  14. <title>websocket/ws/wss在线调试测试工具</title>
  15. </head>
  16. <body>
  17. <div id="root">
  18. <!-- 过渡动效警告框 -->
  19. <template>
  20. <transition name="slide-fade">
  21. <div class="alert ws-alert monospace" :class=" 'alert-' + alert.class " v-if="alert.state">
  22. {{alert.content}}
  23. </div>
  24. </transition>
  25. </template>
  26. <!-- 头部导航 -->
  27. <nav class="navbar navbar-dark bg-primary">
  28. <div class="container">
  29. <a class="navbar-brand monospace" href="javascript:void(0)">
  30. <span>WEBSOCKET</span>
  31. <small>在线测试工具</small>
  32. </a>
  33. </div>
  34. </nav>
  35. <!-- 主体内容 -->
  36. <template>
  37. <div class="container mt-3 main-container">
  38. <div class="row monospace">
  39. <div class="col-sm-12">
  40. <div class="card">
  41. <!-- 应用容器 -->
  42. <div class="card-body">
  43. <div class="row">
  44. <!-- 左侧面板 -->
  45. <div class="col-sm-12 col-md-5">
  46. <!-- 服务设置 -->
  47. <div class="col-sm-12">
  48. <h5 class="card-title">服务器配置 状态: {{ instance.readyState | rStatus }}</h5>
  49. <hr class="divider divider-dashed">
  50. <!-- 连接地址 -->
  51. <div class="card-text">
  52. <div class="input-group">
  53. <div class="input-group-prepend">
  54. <div class="input-group-text">服务地址</div>
  55. </div>
  56. <input type="text" class="form-control" placeholder="ws://im-server-host:8083" v-model="address">
  57. <div class="input-group-append">
  58. <button type="button" class="btn btn-block" :class="connected ? 'btn-danger' : 'btn-success'" @click="autoWsConnect">{{ connected ? '关闭连接' : '开启连接' }}</button>
  59. </div>
  60. </div>
  61. <div class="wf-tip">
  62. 说明:
  63. <div style="color: red">0. 测试ws(非 wss)连接时,请确保本网页是通过 http 方式加载,如果不是的话,需要手动调整为 http 方式加载</div>
  64. <div>1. im-server-host 填节点域名</div>
  65. <div>2. websocket(ws) 端口默认是 8083</div>
  66. <div>3. secure websocket(wss) 端口默认是 8084</div>
  67. </div>
  68. </div>
  69. </div>
  70. <!-- 发包设置 -->
  71. <div class="col-sm-12 mt-3">
  72. <h5 class="card-title">发包设置</h5>
  73. <hr class="divider divider-dashed">
  74. <!-- 自动发送 -->
  75. <div class="card-text">
  76. <div class="input-group">
  77. <div class="input-group-prepend">
  78. <div class="input-group-text">每隔</div>
  79. </div>
  80. <input title="" type="text" class="form-control text-center" v-model="heartBeatSecond" :disabled="!connected">
  81. <div class="input-group-append input-group-prepend">
  82. <span class="input-group-text">秒发送内容</span>
  83. </div>
  84. <input title="" type="text" class="form-control" v-model="heartBeatContent" :disabled="!connected">
  85. <div class="input-group-append">
  86. <button type="button" class="btn btn-block" :class="autoSend ? 'btn-danger' : 'btn-success'" @click="autoHeartBeat" :disabled="!connected">{{ autoSend ? '停止发送' : '开始发送' }}</button>
  87. </div>
  88. </div>
  89. </div>
  90. <!-- 手动发送 -->
  91. <div class="card-text mt-2">
  92. <textarea class="form-control mt-1" id="exampleTextarea" rows="2" placeholder="需要发送到服务端的内容" v-model="content" :disabled="!connected"></textarea>
  93. <div class="custom-control custom-checkbox inline-flex mt-2">
  94. <input type="checkbox" class="custom-control-input" id="sendClean" v-model="sendClean" :disabled="!connected">
  95. <label class="custom-control-label" for="sendClean">发包清空输入</label>
  96. </div>
  97. </div>
  98. <div class="card-text mt-2">
  99. <button class="btn btn-block btn-success" :disabled="!connected" @click="sendData">发送到服务端</button>
  100. </div>
  101. </div>
  102. <!-- 调试消息 -->
  103. <div class="col-sm-12 mt-3">
  104. <h5 class="card-title">调试消息</h5>
  105. <hr class="divider divider-dashed">
  106. <div class="card-text">
  107. <div class="card-title console-box" id="console-box">
  108. <div class="mb-2" v-for="item in consoleData">
  109. <strong :class="'text-'+item.type">{{item.time}} => </strong> <span>{{item.content}}</span>
  110. </div>
  111. </div>
  112. </div>
  113. </div>
  114. </div>
  115. <!-- 右侧面板 -->
  116. <div class="col-sm-12 col-md-7">
  117. <!-- 消息记录 -->
  118. <div class="col-sm-12">
  119. <h5 class="card-title" style="display: inline">消息记录</h5>
  120. <a href="javascript:void(0);" @click="cleanMessage">清空消息</a>
  121. <hr class="divider divider-dashed">
  122. <div>
  123. <div class="custom-control custom-checkbox inline-flex mt-2">
  124. <input type="checkbox" class="custom-control-input" id="recvClean" v-model="recvClean" :disabled="!connected">
  125. <label class="custom-control-label" for="recvClean">收包清空记录</label>
  126. </div>
  127. <div class="custom-control custom-checkbox inline-flex mt-2">
  128. <input type="checkbox" class="custom-control-input" id="recvDecode" v-model="recvDecode" :disabled="!connected">
  129. <label class="custom-control-label" for="recvDecode">收包JSON解码</label>
  130. </div>
  131. <div class="custom-control custom-checkbox inline-flex mt-2">
  132. <input type="checkbox" class="custom-control-input" id="recvPause" v-model="recvPause" :disabled="!connected">
  133. <label class="custom-control-label" for="recvPause">暂停接收</label>
  134. </div>
  135. </div>
  136. <hr class="divider divider-dashed">
  137. <div class="card-text message-box" id="message-box">
  138. <template v-for="item in messageData">
  139. <div class="mb-4" :class="{ 'text-left' : item.direction , 'text-left' : !item.direction }">
  140. <strong><span :class="{'text-success' : item.direction , 'text-primary' : !item.direction}">{{item.direction ? '发送' : '收到'}}消息</span> {{item.time}}</strong>
  141. <div class="monospace" v-if="!recvDecode"> {{ item.content }}</div>
  142. <div class="monospace" v-html='JSON.format(item.content)' v-if="recvDecode"></div>
  143. </div>
  144. </template>
  145. </div>
  146. </div>
  147. </div>
  148. </div>
  149. </div>
  150. </div>
  151. </div>
  152. </div>
  153. </div>
  154. </template>
  155. </div>
  156. <!-- 页面脚本 -->
  157. <script src="https://static.wildfirechat.cn/static/vue.js"></script>
  158. <script src="https://static.wildfirechat.cn/static/moment.min.js"></script>
  159. <script src="https://static.wildfirechat.cn/static/highlight.min.js"></script>
  160. <script src="https://static.wildfirechat.cn/static/json.min.js"></script>
  161. <script src="css/format.js"></script>
  162. <script src="css/socket.js"></script>
  163. </body>
  164. </html>