websocket怎么才能让两个人都能发消息?

前言:移动互联网蓬勃发展的今天,大部分手机 APP和网站都提供了消息推送功能,如新闻客户端的热点新闻推荐,IM 工具的聊天消息提醒,电商产品促销信息,企业应用的通知和审批流程等等。推送对于提高产品活跃度、提高功能模块使用率、提升用户粘性、提升用户留存率起到了重要作用,作为 APP 和网站运营中一个关键的渠道,对消息推送的合理运用能有效促进目标的实现。

一、浅析web端的消息推送原理

股票曲线实时变化,在线IM聊天等等,Web系统里总是能见到消息推送的应用。消息推送用好了能增强用户体验,实现消息推送有N种解决方案。



(1)更简单的方式将消息从服务器端推送至客户端
(2)更简单的方式将消息从各种客户端推送至客户端

GoEasy具体的使用方式这里不再赘述,详见官网。对于后端后端开发者,可直接使用Rest方式调用推送,对于前端或web开发者,可以从web客户端用javascript脚本进行调用推送。

如果是一个老系统进行扩展,那么更推荐使用Server-sent,服务端改动量不会很大。如果是新系统,更推荐websocket,实现的功能功能更全面。

我们如果需要使用websocket技术实现自己的推送服务,需要注意哪些点,或者说需要踩哪些坑呢,本文列出几点供大家参考:

长连接的心跳激活处理;

服务端调优实现高并发量client同时在线(单机服务器可以实现百万并发长连接);

服务端维持多用户的状态;


* 推送消息接口实现类 // 连接成功将,用户ID传给服务端 //接受到服务端关闭连接时的回调方法 // 监听窗口事件,当窗口关闭时,主动断开websocket连接,防止连接没断开就关闭窗口,server端报错 // 如果前端需要保持连接,则需要定时往服务器针对自己发送请求,返回的参数和发送参数一致则证明时间段内有交互,服务端则不进行连接断开操作 // 连接成功将,用户ID传给服务端

原因有很多,最好在WebSocket断开时,将错误打印出来。

CloseEvent有三个字段需要注意, 通过分析这三个字段,一般就可以找到断开原因

正常关闭; 无论为何目的而创建, 该链接都已成功完成任务.
终端离开, 可能因为服务端错误, 也可能因为浏览器正从打开连接的页面跳转离开.
由于协议错误而中断连接.
由于接收到不允许的数据类型而断开连接 (如仅接收文本数据的终端接收到了二进制数据).
保留. 其意义可能会在未来定义.
保留. 表示没有收到预期的状态码.
保留. 用于期望收到状态码时连接非正常关闭 (也就是说, 没有发送关闭帧).
由于收到了格式不符的数据而断开连接 (如文本消息中包含了非 UTF-8 数据).
由于收到不符合约定的数据而断开连接. 这是一个通用状态码, 用于不适合使用 1003 和 1009 状态码的场景.
由于收到过大的数据帧而断开连接.
客户端期望服务器商定一个或多个拓展, 但服务器没有处理, 因此客户端断开连接.
客户端由于遇到没有预料的情况阻止其完成请求, 因此服务端断开连接.
服务器由于重启而断开连接.
服务器由于临时原因断开连接, 如服务器过载因此断开一部分客户端连接.
保留. 表示连接由于无法完成 TLS 握手而关闭 (例如无法验证服务器证书).
可以由库或框架使用.? 不应由应用使用. 可以在 IANA 注册, 先到先得.

HTTP是一个应用层协议,无状态的,端口号为80。主要的版本有1.0/1.1/2.0.

    串行化单线程处理,可以同时在同一个tcp链接上发送多个请求,但是只有响应是有顺序的,只      有上一个请求完成后,下一个才能响应。一旦有任务处理超时等,后续任务只能被阻塞(线头阻塞);

   HTTP2支持多路复用,所以通过同一个连接实现多个http请求传输变成了可能。请求并行执行,某任务耗时严重,不会影响到任务正常执行。

Websocket是html5提出的一个协议规范,是为解决客户端与服务端实时通信。本质上是一个基于tcp,先通过HTTP/HTTPS协议发起一条特殊的http请求进行握手后创建一个用于交换数据的TCP连接。

WebSocket优势: 浏览器和服务器只需要要做一个握手的动作,在建立连接之后,双方可以在任意时刻相互推送信息。同时,服务器与客户端之间交换的头信息很小。

4.3、什么是Http长连接和短连接

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断TCP连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

HTTP1.1通过使用Connection:keep-alive进行长连接,HTTP 1.1默认进行持久连接。在一次 TCP 连接中可以完成多个 HTTP 请求,但是对每个请求仍然要单独发 header,Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。这种长连接是一种“伪链接”

websocket的长连接,是一个真的全双工。长连接第一次tcp链路建立之后,后续数据可以双方都进行发送,不需要发送请求头。

keep-alive双方并没有建立正真的连接会话,服务端可以在任何一次请求完成后关闭。WebSocket 它本身就规定了是正真的、双工的长连接,两边都必须要维持住连接的状态。

  • 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

  • 多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

  • header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。


}




其实,上传文件通常会调用另一个接口,而不是通过websocket,但毕竟人家支持这么做,所以还是写下。
还挺麻烦的,分两章来写。

这一章我们先做个初版,会有bug,下一章会在这一章基础上修复这个bug。

毕竟真的有很多东西啊!!

这个是用来上传文件用的,先解释一下 byte[] 这个参数。
好吧~ 大家猜的没错,这个就是我们文件的二进制流

所以说,我们要干两件事
第一,我们js要获得文件,并转成二进制流发过来
第二,在上传之前,我们需要知道文件的名字,因为这个二进制流是一个数组,没法知道文件的名字!(实测,js不能修改这个二进制流哦)

1、在 onMessage(string) 中用将文件信息存起来,并删除已有的文件
3、在onClose中将关闭原因打印一下(这就是那个bug导致的)。

    2、 接下来,大家就可以开心的上传文件了

    这时候,有的同学就成功了,有的同学就失败了。
    成功的同学选个大点的文件(>10M)
    失败的同学选个小点的文件(<1M)

    失败的同学会显示websocket已断开,如下图
    看一下后台的报错:(检查一下onClose是不是和我上面的一样,要打印一下关闭原因哦~)

    文件:我有2,254,618B,我的很大,你忍一下
    Websocket:不行,我只有8192B,太大了,忍不了,放不开

    所以啊,我们要将文件切分,挨个上传,一次传一点,这篇有点长,我们下篇再说




}

    两个人如何使用同一个vps服务器 内容精选 换一换

  • :配置为已启户A、户B、户C可以分别使用账号A、账号B、账号C同时登录云服务器,但是不支持户A、户B、户C使用同一个账号同时登录云服务器。 已禁:单个户同时多个登录的多户登录。 例:配置为已禁户A、户B、户C可以使用同一个账号同时登录云服务器。

  • 已启用:多个用户同时登录的多户登录,不能单个户多登录。 例:配置为已启户A、户B、户C可以分别使用账号A、账号B、账号C同时登录云服务器,但是不支持户A、户B、户C使用同一个账号同时登录云服务器。 已禁:单个户同时多个登录的多户登录。 例:配置为已禁户A、户B、用

  • 两个人如何使用同一个vps服务器 相关内容

  • 据您的实际需要自助配置应环境或相关软件。 私有镜像 户基于外部镜像文件或裸金属服务器创建的个人镜像,仅户自己可见。包含操作系统、预装的公共应以及户的私有应。选择私有镜像创建裸金属服务器,可以节省您重复配置裸金属服务器的时间。 共享镜像 将其他户共享的私有镜像,作为自己的镜像进行使用。

  • 服务器的安全性非常重要的一个方面,所以在日常生活中定要维护好,那么,服务器防火墙怎么配置呢?如何进入服务器防火墙?想知道的小伙伴们就跟着小编来看看相关内容的介绍吧。如何进入服务器防火墙如何检查服务器防火墙引起的端口不通服务器本身防火墙般有三地方需要检查:/videos/102987

  • 本示例中,数据库源端为ECS自建MySQL,目的端为RDS实例,同时假设ECS和RDS实例在同一个VPC中。部署架构图1所示。 果自建MySQL和RDS实例不在同一个VPC内,相比于相同VPC的情况,需要配置两个VPC的对等连接,部署架构图图2所示。 本文档中以同一VPC为例,如何配置两个VPC的对等连接请参考配置对等连接。

  • 域名”方式逐条添加。 同一防护域名不能重复添加到WAF云模式。 同一个域名对应不同端口视为不同的防护对象,例:8080和:8081为两个不同的防护对象,且占两个域名防护配额。果您需要防护同一域名的多个端口,您需要将该域名和端口逐一添加到WAF。

  • API请求的组成,并以调脸检测为例说明如何API,您还可以通过这个视频教程了解如何构造请求调API:/videos/102987。 请求URI

  • 认证鉴权 调接口有种认证方式,您可以选择其中种进行认证鉴权。 Token认证:通过Token认证通请求。 AK/SK认证:通过AK(Access Key ID)/SK(Secret Access Key)加密调请求。推荐使用AK/SK认证,其安全性比Token认证要高。

  • 在划分网段时还应考虑该网段的IP容量,即有多少可的IP数。 最多可以创建多少个子网? 一个户可以创建100子网,果无法满足实际需求,可以申请扩容。具体操作请参见什么是配额? 如何规划路由策略? 路由表由系列路由规则组成,于控制VPC内子网的出流量走向。户创建VPC时,系统会自动为其生成一个默认路由表,该默认路由表含义为VPC内网互通。

  • ?。 负载均衡的后端服务器可以反过来访问公网/私网负载均衡器上的端口吗?。 ELB可以绑定其他友商的EIP使用吗?。 删除弹性负载均衡时,删除按钮为灰色,无法删除,是什么原因?。 使用负载均衡必须配置带宽吗?。 一个负载均衡可以绑定多个EIP吗?。 创建/启独享型ELB后为什么会占用多个子网IP?。

  • 在划分网段时还应考虑该网段的IP容量,即有多少可的IP数。 最多可以创建多少个子网? 一个户可以创建100子网,果无法满足实际需求,可以申请扩容。具体操作请参见什么是配额? 如何规划路由策略? 路由表由系列路由规则组成,于控制VPC内子网的出流量走向。户创建VPC时,系统会自动为其生成一个默认路由表,该默认路由表含义为VPC内网互通。

  • 本示例中,数据库源端为ECS自建MySQL,目的端为RDS实例,同时假设ECS和RDS实例在同一个VPC中。部署架构图1所示。 果自建MySQL和RDS实例不在同一个VPC内,相比于相同VPC的情况,需要配置两个VPC的对等连接,部署架构图图2所示。 本文档中以同一VPC为例,如何配置两个VPC的对等连接请参考配置对等连接。

  • PC的情况,需要配置两个VPC的对等连接,部署架构图图2所示。 本文档中以同一VPC为例,如何配置两个VPC的对等连接请参考配置对等连接。 图1 同一VPC的部署架构 图2 不同VPC场景的部署架构

  • 构造请求 本节介绍REST API请求的组成,并以调IAM服务获取户Token接口说明如何API,该API获取户的Token,Token可以于调其他API时鉴权。 您还可以通过这个视频教程了解如何构造请求调API:/videos/102987

  • 同时拥有自定义路由和弹性公网IP的弹性云服务器访问外网的优先级是什么? 本地主机访问使用弹性云服搭建的网站出现间歇性中断怎么办? 同一个子网下的弹性云服务器只能通过内网IP地址单向通信怎么办? 同一个VPC内的弹性云服务器无法互通或者出现丢包等现象时,如何排查? 为什么对等连接创建完成后不能互通?

  • 区指在同一区域下,电力、网络隔离的物理区域,可区之间内网互通,不同可区之间物理隔离。 果您需要提高应的高可性,建议您将弹性云服务器创建在不同的可区。 果您需要较低的网络时延,建议您将弹性云服务器创建在相同的可区。 随机分配:创建云服务器时可以选择随机分配可区,

  • 户创建一个SFS容量型文件系统A,文件系统使用的是VPC-B,网段为:8080和:8081为两个不同的防护对象,且占两个域名防护配额。果您需要防护同一域名的多个端口,您需要将该域名和端口逐一添加到WAF。

  • 么? 如何区分不同IAM账户创建的短信应? 想发送不同类型的短信该如何操作? 短信应的作是什么? 认证问题 个人户能使用消息&短信服务吗? BP账户能使用消息&短信服务吗? IAM户能使用消息&短信服务吗? 合作伙伴账号能使用短信服务吗? 消息&短信服务是否支持海外站点接入?

两个人如何使用同一个vps服务器

提交成功!非常感谢您的反馈,我们会继续努力做到更好 反馈提交失败!请稍后重试!

}

我要回帖

更多关于 websocket如何保持长连接 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信