websocket实践

1.什么是websocket

1)首先websocket和http一样,是一种网络通信协议,来自HTML5的特性;

2)他可以使客户端和服务端进行双工通信,简单来说就是:比如我们熟悉的http协议,由客户端发起请求,通过三次握手,与服务端建立联系,并发送数据,获得响应,这是单向的,而websocket实现了服务端向客户端主动发送数据。

3)只要不主动切断联系,服务端的数据就可以一直向客户端输送,场景如:智慧交通交通系统,例如有车闯红灯了,服务端就会发送数据,在客户端发出报警信息,还有一些智慧工厂,最简单的还是我们的聊天系统,对方发送的消息可以不通过你的发起就能发送给你,这样的例子还很多。

PS:详细的学习内容自行百度推荐一个

WebSocket - Web API 接口参考 | MDN

2.使用

碰到的机会不是很多,我遇到的所有场景都是和报警或者网站告警有关系,下面就使用原生的实现:

// 首先判断浏览器是否支持
if ('Websocket' in window) {
    const ws = new Websocket(url);
    // 连接建立好之后的回调
    ws.onopen = (event) => {
        console.log("WebSocket is open now.");
        // 传送一些后台需要的数据(string类型或者二进制文件图片等数据)
        ws.send('') 
    };
    // 后台返回的数据
    ws.on('message', (event) => {
        const res = JSON.parse(event.data);
        console.log(res);
    })
    // 关闭连接
    ws.close();
} else {
    // 浏览器不支持
}

上面代码的注释就是执行步骤,有几个点特别说一下:

1)open和message事件专门用两种写法写的,都是可行的,open是建立连接的回调,一般都在这发送信息给后台,message是后台传数据回来的方法,这写是和后台约定好的,一般都是这样;

2)最后记得关闭close(),websocket中方法直接执行的有两个,一个是send一个就是close;

3)传参过去基本都是字符串,message返回参数event.data;

3.实际开发中遇到的一些问题

首先,问题是我自己对websocket特性的不熟悉导致的,因为项目使用nginx代理,而之前调用websocket的时候都是直接写的链接,所以在想能不能代理,结果却是看到了这句话:

webSocket 没有同源限制,客户端可以与任意服务器通信

这句意味着根本不需要考虑跨域的问题,直接填写url全部就好;

然后还有一个在本地调用的时候ws://开头可以使用,而上了生产环境就不行了,这个请教了后台同事,这个就是和你的本身浏览器地址有关,需要动态更改,基础的就是这样,先写这些。

PS:websocket还有很多方法和几个常用库,都比较实用,可以试一试。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值