• 别光顾剁手了,来学习下双12背后的websocket技术


    作为测试工程师,相信http协议大家都耳熟能详了。最近经常测试websocket接口,估计很多童鞋这个比较陌生,所以今天我们来主要聊一下websocket。

    首先给大家说一个生活中的场景吧,我们在电商平台买东西的时候都会去找客服聊天,那么大家知道我们是如何跟客服进行通信的吗? 

    类似上面这种场景,买家和卖家的通信过程是这样的:

    买家向服务器发起消息,然后服务器把消息推送给商家。商家有消息再把消息给服务器,服务器把消息转给买家。

    如果我们用http协议来实现的话,客户端跟服务器是如下图所示进行交互

    买家: 亲,这个商品有优惠券吗?

    服务器:收到消息,等待卖家拉取消息

    买家(问服务器): 有回复消息吗

    服务器回复:当前没有消息

    one second later......

    买家(问服务器): 有回复消息吗

    服务器回复:当前没有消息

    卖家回复: 双12全场5折

    服务器: 收到消息,等待买家拉取消息

    买家(问服务器): 有回复消息吗

    服务器: 有消息,消息内容:双12全场5折

    ......

    童鞋们觉得这种交互模式可以吗?有什么缺点吗?是不是很消耗服务器的性能?

    答案是肯定的,以上方式非常消耗服务器的性能,因为http协议的被动性,所以只能由客户端不断的主动向服务器发起HTTP请求,服务端被动的进行响应。在这个过程中,服务器是不能主动的发起消息。这样尽管服务器上此时没有消息,但是客户端还是需要一次次来轮询请求。大家试想一下,如果服务器能主动的发起请求,等到有消息推送的时候,服务器主动的发起消息给客户端,那么是不是会节省很多服务器的性能呢?

    所以我们的websocket协议就应运而生了,因为websocket协议可以在客户端和服务端之间进行双向数据传输,所以非常完美的解决了这个问题。那么接下来我们详细的介绍一下websocket协议,它是基于tcp的一种独立实现。

    还是上面那个场景,如果采用websocket协议,客户端和服务器的聊天模式如下:

    买家:啦啦啦,我要建立Websocket协议

    服务端:ok,确认,已升级为Websocket协议(HTTP Protocols Switched),长链接已建立。

    买家: 亲,这款LV包包有优惠券吗?

    服务器:收到消息,已推送至卖家

    卖家收到消息后回复: 亲,这款包包现在可以直减10元

    服务器: 收到消息,已推送至买家

    卖家主动回复: 亲还在吗?

    服务器: 收到消息,已推送至买家

    买家收到了两条推送消息.

    ......

    买家内心OS:打扰了,告辞

    买家下线,链接断开

    正因为上面说的一些特点,websocket非常适合对数据实时性要求比较高的场景。当服务端有数据的时候,第一时间推送至客户端,而不需要客户端定时轮询请求。

    比如弹幕,消息订阅,多玩家游戏,协同编辑,股票基金实时报价,视频会议,在线教育等等。

    好的,今天websocket协议的原理就给大家分享这些了,童鞋们有问题可以在讨论区留言哟,如果大家还想看如何用jmeter做websocket接口自动化测试的话,可以在讨论区留言哟,后续分享下基于jmeter的websocket测试。

    作  者: 夭夭老师 

    出  处:微信公众号:自动化软件测试平台

    版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接

  • 相关阅读:
    Kubernetes 1.5 配置dns
    详细图解,一眼就能看懂!卷帘快门(Rolling Shutter)与全局快门(Global Shutter)的区别
    把C#程序(含多个Dll)合并成一个Exe的超简单方法
    TortoiseSVN 合并操作简明教程
    简单说说.Net中的弱引用
    漫谈并发
    可靠UDP设计
    自动内存管理算法 —— 标记和复制法
    Unity防破解 —— 加密Dll与Key保护
    Unity防破解 —— 重新编译mono
  • 原文地址:https://www.cnblogs.com/testfan2019/p/14143574.html
Copyright © 2020-2023  润新知