Go: WebSockets单元测试

Go: WebSockets单元测试,第1张

WebSockets通过TCP连接提供客户端与服务器之间的双向即时通信。这意味着,我们可以维护一个TCP连接,然后发送和监听该连接上的消息,而不是不断地通过新建TCP连接去轮询web服务器的更新。

在Go的生态中,WebSocket协议有几个不同的实现。有些库是协议的纯实现。另外一些人则选择在WebSocket协议的基础上构建,为他们特定的用例创建更好的抽象。

下面是一个不全面的Go WebSocket协议实现列表:

在线拍卖是以实时通信为核心的行业之一。在一场拍卖中,几秒钟的时间就决定了你是赢了还是失去了一件你一直想要的收藏品。

让我们以gorilla/websocket库实现的简单拍卖应用程序作为本文的示例。

首先,我们将定义两个非常简单的结构体Bid和Auction,我们将在WebSocket处理程序中使用它们。 Auction 有一个Bid方法,我们将使用该方法接收客户端发送来的竞价请求。

这两种类型都相当简单,包含的字段非常少。NewAuction构造函数构建一个带有持续时间、itemID和*Bids的Aution实例。

我们将通过 Bid 方法来实现拍卖的竞标动作:

Auction的Bid方法就是物品竞拍发生的地方。它接收一个 amount 和 userID 作为参数,并向 Auction 对象中添加Bid实例。而且它会检查竞拍是否结束以及的竞拍价格是否大于已有的最大竞价。如果这些条件中的任何一个不满足,它将向调用者返回适当的错误。

有了结构体定义和Bid方法,让我们深入到WebSockets机制。

想象一下,一个可以在拍卖中实时出价的网站。它通过WebSockets发送的每一条JSON消息都会包含用户的标识符( UserID )和出价的金额( amount )。一旦服务器接受了消息,它将参与竞价并向客户端返回一个竞拍结果。

在服务器端,此通信将由 net/http 处理程序完成。它将处理所有WebSocket的业务逻辑,有几个值得注意的步骤:

1、将接收到的HTTP连接升级为WebSocket连接。

2、接收来自客户端的消息。

3、从消息中解码出bid对象。

4、参与竞价。

5、 向客户端发送竞拍结果。

下面我们来实现这个处理程序。首先定义 inbound 和 outbound 消息类型,用于接收和发送客户端消息。

它们都分别表示入站/出站消息,这就是在客户端和服务器之间的交互数据。 inbound 入站消息将表示一个出价,而 outbound 类型表示一个简单的返回消息,其Body中包含一些文本。

接下来定义 bidsHandler ,包含ServeHTTP方法实现HTTP连接的升级:

首先定义 websocket.Upgrader ,接收处理程序的 http.ResponseWriter 和 *http.Resquest 并升级连接。 因为这只是一个应用程序示例 upgrader.CheckOrigin 方法将只返回true,而不检查传入请求的来源。一旦 upgrader 完成连接的升级,将返回 *websocket.Conn 对象保存在 ws 变量中。 *websocket.Conn 将接收所有客户端发送来的消息,也是处理程序读取请求内容的地方。同样,处理程序将会向 *websocket.Conn 写入消息,它将向客户端发送响应消息。

for 循环做了几件事:首先,使用 ws.ReadMessage() 读取websocket消息,改函数返回消息类型(二进制或文本)和消息内容( m )以及可能发生的错误( err )。然后,检查客户端是否意外地关闭了连接。

错误处理完成并读取到消息,我们将使用 json.Unmarshal 对其进行解码。接着调Bid方法参与竞拍。然后使用 json.Marshal 对返回内容进行序列化,使用 ws.WriteMessage 方法发送给客户端。

尽管编写WebSocket处理程序比普通HTTP处理程序要复杂得多,但测试它们很简单。事实上,测试WebSockets处理程序就像测试HTTP处理程序一样简单。这是因为WebSockets是在HTTP上构建的,所以测试WebSockets使用的工具与测试HTTP服务器相同。

首先添加测试用例:

首先,我们从定义测试用例开始。每个用例有一个 name ,这是测试用例的可读名称。此外,每个测试用例都有一个 bids 切片和一个duration持续时间,用于创建一个测试拍卖对象 Auction 。测试用例还有一个入站消息 inbound 和一个出站回复 outbound —这是测试用例将发送给处理程序并期望从处理程序返回的消息。

在TestBidsHandler中我们添加三种不同的测试用例——一个是客户端发起了错误的报价,低于目前最大报价,另一个测试用例,客户端添加了一个正常的报价,第三个客户端参与的拍卖已结束。

下面完成测试函数:

我们在subtest函数体中添加了一些新函数。 newWSServe r将创建一个测试服务器并将其升级为WebSocket连接,同时返回服务器和WebSocket连接。然后, sendMessage 函数将通过WebSocket连接将消息从测试用例发送到测试服务器。之后,通过 receiveWSMessage ,我们将从服务器读取响应,并通过将其与测试用例的进行比较来断言其正确性。

那么,这些新的函数的作用是什么呢?让我们逐一分析。

newWSServer 函数使用 httptest.NewServer 函数将处理程序挂载到测试HTTP服务器上。通过 httpToWS ,实现了将服务器的 URL 转为websocket URL (它只是将URL中的 http 协议替换为 ws ,或将 https 替换为 wss 协议)。

为了建立WebSocket连接,我们使用 WebSocket.DefaultDialer ,它是一个所有字段都设置为默认值的dialer。调用 Dial 方法通过WebSocket服务器URL (wsURL)返回WebSocket连接。

sendMessage 函数接收一个WebSocket连接和 inbound 消息作为参数。将消息序列化成json以二进制格式在websocket连接中发送。

receiveWSMessage 函数以 ws WebSocket连接为参数,通过 ws.ReadMessage() 读取请求消息,然后反序列化成 outbound 类型返回。

如果我们运行测试,我们将看到它们通过:

品牌型号:华为MateBook D15

系统:Windows 11

即时通信软件是一种基于互联网的即时交流软件,是通过即时通讯技术来实现在线聊天、交流的软件。有2种架构形式,一种是C/S架构,采用客户端/服务器形式,用户使用过程中需要下载安装客户端软件,典型的代表有:微信、QQ、BigAnt、有度即时通、如流(原百度HI)、Skype 、Gtalk、新浪UC、MSN、钉钉、企业微信、360织语、飞书等。

常规的即时通讯软件分为两类,一类个人应用的个人即时通讯,QQ和MSN主要是个人应用;另一类是企业即时通讯,企业即时通讯,如通软联合GoCom、腾讯RTX、恒创ActiveMessenger等都是一种是以企业内部办公为主,建立员工交流平台;GoCom融合信息平台是北京通软联合信息技术有限公司推出的一款能够集成企业应用系统消息和电信通讯应用的企业级即时通信平台,它致力于帮助企业解决信息孤岛、提高运营效率、降低沟通成本、实现人员与业务系统的实时协同,是一种高度可管理、低成本、易部署的IT平台。

问题一:什么是即时通讯? 即时通讯就是你跟我说一句,我回你一句这类软件。分个人和企业,个人使用的你肯定熟悉不过企鹅,企业的我推荐你益信

问题二:即时通信和实时通信的区别 即时通信(im)和实时通信都是一套网络通信系统,其本质都是对信息进行转发。其最大的不同点,是对信息传递的时间规定。二者的区别可以从以下几个方面:

一、场景

常见的即时通信场景包括文字聊天、语音消息发送、文件传输、音视频播放等。通俗的说,就是发短信。

实时通信的场景包括语音、视频电话会议、网络电话等。通俗的说,就是打电话。

二、产品需求点

即时通讯:主要要求可靠,考核送达率。要是你发一条短信,结果丢了,对方没收到!你再也不相信短信了吧。

实时通信:主要要求低延时和接通率。

低延时:你打一通电话,每说一句话,对方得几秒钟才有回应,这电话你也讲不下去了吧。

接通率:你打电话,你这边听到接通了,实际上对方的手机毫无反应,这实际上就没接通。这跟短信没送到,造成的恶劣影响是一样的。

三、技术环节

即时通信技术环节:消息发送和确认,【消息接入端、服务端消息逻辑处理,服务端消息缓存和存储,转发,服务端用户状态管理,心跳机制,消息发送端】、消息接收和确认。

实时通信技术环节:采集、前处理、编码、【服务端接入、转发、服务端接入】、解码、播放和渲染。

这些技术环节重合的部分是:信息转发。

四、传输协议

公共互联网上,最常用的通信协议有TCP、UDP。

TCP:Tran *** ission Control Protocol,传输控制协议是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。有延迟不可控的特点。

UDP:User Data Protocol,用户数据报协议,是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。 存在丢包、抖动、延迟的特征。

即时通信系统为了保证连接的可靠性,最常用的是TCP协议或者类TCP连接协议。这类协议的特点是追求连接的可靠性,而造成了延迟的不可控性,超过2秒的延迟响应是常态,甚至几十分钟的延迟响应,而电信级的实时通信标准是400ms,而基于互联网的实时通信需要另辟蹊径,开创出新的传输解决方案。这又与应用场景相关了。发短信,延迟几秒钟送达,对使用者影响不大。

实时通信,会采用 UDP 作为基础传输协议。在设计低延时的实时通信服务时,UDP 表现要比 TCP 好得多。这是因为实时通信中,低时延比可靠性更重要。打电话,几秒的延迟是不能忍受的。

TCP协议封装了消息的重传机制,在丢包的情况下,采用TCP协议的应用程序几乎无法优化这个重传机制,来达到低时延的效果。特别是在移动互联网络中,超过30%丢包时,TCP 的延时可以到几十分钟, 超过 50%丢包时,甚至很容易断开。 在同样丢包30%的链路上,UDP还可以传输数据,TCP就无法进行实时通信了。

基于UDP协议,加上对丢包的情况开发了各种算法进行补偿,一方面尽量保证和恢复数据的连续性。另外一方面,当某些数据包无法恢复时,会丢弃对应的音视频数据包,而不会影响后续的实时通信服务。

五、成本

成本涉及到的环节有:服务端接入、存储和转发。(人工成本就不谈了)

二者成本会产生差异的环节有:

从服务端接入方式来看,即时通信采用TCP协议来保证可靠性,可能会建立多个连接,相比无连接的UDP传输方式,这是一种昂贵的传输方式。实时通信可以基于UDP协议,与服务端建立灵活的、快速的接入机制。

存储方面,实时通信在服务端是实时转发,不会在服务端存储数据,而即时消息系统一般会将缓存转为存储数据,包括富媒体数据,会占用大量的存储空间,产生更多的存储成本。

从成本上来看,传输同样信息量的数据,基于TCP的即时通信方式......>>

问题三:名词解释:什么是即时通讯 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。 不容置疑,Internet已经成为真正的信息高速公路。从实际工程应用角度出发,以计算机网络原理为指导,结合当前网络中的一些常用技术,编程实现基于C/S架构的网络聊天工具是切实可行的。

目前,中国市场上的企业级即时通信工具主要包括:信鸽、视高科技的视高可视协同办公平台、263EM、群英CC2010、通软联合的Go、腾讯公司的RTX、IBM的Lotus Sametime、点击科技的GKE、中国互联网办公室的imo、中国移动的企业飞信、华夏易联的e-Link、擎旗的UcStar等。相对于个人即时通信工具而言,企业级即时通信工具更加强调安全性、实用性、稳定性和扩展性。[1]

实时通信(Instant Messaging,简称IM)是一个实时通信系统,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。[2]

中文名

即时通讯

中文名

即时通讯

译 名

Instant Messenger

简 称

IM

分 类

应用软件

又 名

实时通讯

问题四:什么是即时通信 即时通信(IM)是指能够即时发送和接收互联网消息等的业务。1998年即时通信的功能日益丰富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。即时通信不再是一个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合化信息平台。随着移动互联网的发展,互联网即时通信也在向移动化扩张。目前,微软、AOL、Yahoo等重要即时通信提供商都提供通过手机接入互联网即时通信的业务,用户可以通过手机与其他已经安装了相应客户端软件的手机或电脑收发消息。

baike.baidu/view/1触88645

问题五:实时聊天是什么意思 就是两个人同时在互相聊天,一般是通过网络聊天工具

问题六:即时通信的简介 即时通信(IM)是指能够即时发送和接收互联网消息等的业务。自1998年面世以来,特别是近几年的迅速发展,即时通信的功能日益丰富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。即时通信不再是一个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合化信息平台。

问题七:即时通讯软件是什么? VOIP(网络电话)利用互联网直接拨打对方的固定电话和手机,用网络电话可以随时随地拨打国内、国际电话,通话质量清晰稳定,而资费只有传统电话 的10%-20%,可以帮助用户大大节省手机话费。VOIP(网络电话)以其低成本和方便快捷的优势,受到越来越多用户的喜爱。可以分为软件电话和硬件电话。

软件电话:软件电话是在电脑/手机/平板上下载软件,然后购买网络电话卡,然后通过耳麦或者其他终端实现和对方(固话或者手机)进行通话;

硬件电话:硬件电话比较适合公司、话吧等使用。首先要一个语音网关,网关一边接到路由器上,另一边接到普通的话机上,然后普通话机即可通过网络自由呼出了。答案来自蜂云智能网站。

问题八:搜索引擎和即时通信的服务功能是什么 搜索引擎是一个检索工具,用于关键词搜索,并把相关结果呈现出来,用户可以点击进入查看,信息是已经存在的。

即时通信是一对一沟通工具,是在线的,实时的。

问题九:即时通讯软件是什么 80分 即时通讯(Instant messaging,简称IM)是一个终端服务,允许两人或多人使用网路即时的传递文字讯息、档案、语音与视频交流。

即时通讯按使用用途分为企业即时通讯和网站即时通讯,根据装载的对象又可分为手机即时通讯叮PC即时通讯。

手机即时通讯代表是短信

PC即时通讯如:QQ、MSN、百度hi、等


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/452522.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-01
下一篇2023-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存