JS采用WebSocket与后端服务器通信

本文介绍了在JavaScript中使用WebSocket与后端服务器进行通信的实践经验,包括连接建立、发送与接收数据、异常处理以及如何处理地址变化。通过创建发送和接收模板简化通信过程,并提供了一个通用的方法来管理WebSocket连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  我想大家会有个疑问,我为何会采用websocket通信,其实作为新手得我也尝试过用ajax、socket、vue.ajios等方式都失败了,我也没有搞懂什么回事,就是秉着不管白猫黑猫,能抓到老鼠就是好猫,我只要能通信,完成功能即可,暂时不管这么多,至于原理以后再研究。

  我只负责前端,后端服务器是另个同事负责,他用的是C#来编写,所以参照一个网址模板(双方都按照约定方式编写):https://www.cnblogs.com/notyourdog/p/9728047.html

如果后端使用java或者其他写法,网上搜索下服务端的websocket的写法。

尝试我给他发信息可以收到,他给我回得消息我也收的到。

用了一段时间,目前通信正常,没有发现什么异常,满足基本需求,其他得就不太了解了。

 

第一次连接,模板如下:

//第1步 连接后端
   //window.YESconnectServer();//后期修改ip方便
   var wsImpl = window.WebSocket || window.MozWebSocket;
    // 创建新的websocket新连接端口
    window.ws = new wsImpl('ws://192.168.0.1:8888');//192.168.0.1这是后端服务器地址,本地是127.0.0.1或者localhost,这里要注意:要与服务端统一ip写法(或者服务端监听所有得,如0.0.0.0:8888),否则其他电脑无法访问。
    console.log("连接中,等待连接 ..<br/>");
    //没有连接上就给客户提示
    document.getElementById("container").innerHTML = '<img src="img/xxx.gif" style="margin-left:80px;margin-top:50px;"/><span style="margin-left:-80px;color:red">请尝试按F5刷新页面</span>';

    //第2步 当链接对象找到服务端成功对接后,提示正常打开
    ws.onopen = function () {
        console.log("连接成功");
        //连接公共就要取消提示:visibility:hidden;
        document.getElementById("container").innerHTML = '<img src="img/xxx.gif" style="margin-left:80px;margin-top:30px;visibility:hidden;" /><span style="margin-left:-90px;color:red;visibility:hidden;">等待时间久,请尝试刷新页面</span>';

        // id对应刻客户本机的IP
        // console.log("唯一id号:"+id); //打印看看对否

    // 发送数据给后端处理,这里我使用的是json
    let data = {
          "xxx": xx,
          "xxx": xx,
          "xxx": xx,
          "xxx": ""
        }
      var sendStr = JSON.stringify(data);
      // console.log("发送数据(转换后):" + sendStr);
      ws.send(sendStr);
    };

    //第3步 接收到
WebSocket客户端和服务端实例源码 WebSocket ws实例 HTML5 用java实现的服务端 Websocket服务器的正常通信 众所周知,Web 应用的交互过程通常是客户端通过浏览器发出一个请求,服务器端接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈现,这种机制对于信息变化不是特别频繁的应用尚可,但对于实时要求高、海量并发的应用来说显得捉襟见肘,尤其在当前业界移动互联网蓬勃发展的趋势下,高并发用户实时响应是 Web 应用经常面临的问题,比如金融证券的实时信息,Web 导航应用中的地理位置获取,社交网络的实时消息推送等。 传统的请求-响应模式的 Web 开发在处理此类业务场景时,通常采用实时通讯方案,常见的是: 轮询,原理简单易懂,就是客户端通过一定的时间间隔以频繁请求的方式向服务器发送请求,来保持客户端和服务器端的数据同步。问题很明显,当客户端以固定频率向服务器端发送请求时,服务器端的数据可能并没有更新,带来很多无谓请求,浪费带宽,效率低下。 基于 Flash,AdobeFlash 通过自己的 Socket 实现完成数据交换,再利用 Flash 暴露出相应的接口为 JavaScript 调用,从而达到实时传输目的。此方式比轮询要高效,且因为 Flash 安装率高,应用场景比较广泛,但在移动互联网终端上 Flash 的支持并不好。IOS 系统中没有 Flash 的存在,在 Android 中虽然有 Flash 的支持,但实际的使用效果差强人意,且对移动设备的硬件配置要求较高。2012 年 Adobe 官方宣布不再支持 Android4.1+系统,宣告了 Flash 在移动终端上的死亡。 从上文可以看出,传统 Web 模式在处理高并发及实时性需求的时候,会遇到难以逾越的瓶颈,我们需要一种高效节能的双向通信机制来保证数据的实时传输。在此背景下,基于 HTML5 规范的、有 Web TCP 之称的 WebSocket 应运而生。 早期 HTML5 并没有形成业界统一的规范,各个浏览器和应用服务器厂商有着各异的类似实现,如 IBM 的 MQTT,Comet 开源框架等,直到 2014 年,HTML5 在 IBM、微软、Google 等巨头的推动和协作下终于尘埃落地,正式从草案落实为实际标准规范,各个应用服务器及浏览器厂商逐步开始统一,在 JavaEE7 中也实现了 WebSocket 协议,从而无论是客户端还是服务端的 WebSocket 都已完备,读者可以查阅HTML5 规范,熟悉新的 HTML 协议规范及 WebSocket 支持。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试狂人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值