经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JSJS库框架 » JavaScript » 查看文章
WebSocket 学习笔记
来源:cnblogs  作者:努力的河马君  时间:2018/10/9 10:06:06  对本文有异议

WebSocket 学习笔记

来自我的博客

因为项目原因需要用到双工通信,所以比较详细的学习了一下浏览器端支持的 WebSocket.
并记录一些遇到的问题。

简介

WebSocket 一般是指浏览器提供的 API 接口,允许 Web 页面通过 WebSocket 协议与远程主机进行双向通信。

注:本接口不允许到底层网络的原始访问。举例说明,本接口不能被用于实现一个不通过自定义服务器代理发送消息的 IRC(网间实时聊天,Internet Relay Chat)客户端。

接口说明 文档

WebSocket 对象提供了用于创建和管理 WebSocket 连接,以及可以通过该连接发送和接收数据的 API。

常见问题

1.基于 WebSocket 心跳功能

因为 WebSocket 本身不提供心跳功能,所以在有些时候无法及时正确的判断与后端的连接状态,很多时候就需要自己来进行实现。可以通过与后端约定定时握手的形式来实现心跳功能。比如说每 30 秒通信一次。

  1. /** WebSocket 心跳 **/
  2. const msg = "heatbeat"; // 约定的心跳消息
  3. let timer = null; // 定时器
  4. let lastMsgTimestamp = null; // 时间戳
  5. let ws = new WebSocket(""); // ws 实例
  6. ws.onopen = e => {
  7. // 更新时间戳
  8. lastMsgTimestamp = new Date().getTime();
  9. if (e.type === "open") {
  10. // 创建心跳连接
  11. if (timer) {
  12. clearInterval(timer);
  13. }
  14. timer = setInterval(heatbeat, 10000);
  15. }
  16. };
  17. function heatbeat() {
  18. if (ws) {
  19. if (new Date().getTime() - lastMsgTimestamp > 300000) {
  20. clearInterval(timer);
  21. console.log("心跳已断开");
  22. // ... 心跳断开后的处理
  23. } else {
  24. // 发送约定的心跳
  25. ws.send(msg);
  26. }
  27. }
  28. }
  29. /** 记得关闭连接时清楚定时器 **/

TODO 通信中断重连问题

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号