网状的中如何实现客户端与服务器端的长连接

介绍

本篇文章给大家分享的是有关网状的中如何实现客户端与服务器端的长连接,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

网状的通过webSocket实现服务器与客户端的长连接,Tomcat8,春天,网状的提供了对webSocket的支持,实现了真正意义上的长连接!

我们通过简单的实现,体验下这个长连接!

体验之前先说下Http与webSocket的关系介绍:

,,,,Http是一个无状态的,协作的响应式链接,所谓的无状态体现在服务器是无法追踪到根消息来自哪个客户端的,通过cookei,会话的形式保存消息

,,,,在网页聊天中,通过轮询,提交的形式实现短时间的链接,这种通过重复建立链接的方式是效率较低,且最重要的是不能实时的,也就是准实时性。

,,,,,持续链接的方式,体现在当服务器无结果返回时,客户端无法感知,对于资源,带宽的浪费;

,,,,,websocket实现了真正意义上的客户端与服务器端的长连接,节省带宽,而关注内容本身

,,,,,websocket: 1——:双向数据传递

,,,,,,,,,,,,,,,,2——:基于Http

,,,,,,,,,,,,,,, 3--:非浏览器场合

下面我们通过程序的运行体会一下!

建立server端!

Netty中如何实现客户端与服务器端的长连接

我们发现无论是对Http的支持还是对socket连接,其建立运行的方式都是一致的,在server端新增了handler(new LoggingHnadler),用于打印日志

绑定端口号8899,new InetSocketAddress等同于直接绑定8899

建立serverInnitializer

Netty中如何实现客户端与服务器端的长连接

这里的ws解释为websocketPath,即为请求时pathcoment

例如本次:ws://localhost:8899/ws

ws是指文末的ws,而开头的ws是固定的websocket的书写方式

其中HttpObjectAggregator是聚合处理,点进去看一下

Netty中如何实现客户端与服务器端的长连接

创建了一个示例,参数时max的文本长度,可聚合字节,相当于分段的理念

创建自己的handler

Netty中如何实现客户端与服务器端的长连接

为了体验消息的实时性,用localdateTime.now()打印系统时间

这里我们看下asLongText的源码

Netty中如何实现客户端与服务器端的长连接

ChannelId继承了serializable

其中asShortText为:返回一个短文本但不是唯一的一个channelId'

其中asLongText为:返回一个长文本但是唯一的一个channelId‘

websocket支持Html或第三方库的运行方式,我们写一下页面

Netty中如何实现客户端与服务器端的长连接

一个发送数据的文本框,一个接收数据的文本框

js部分

Netty中如何实现客户端与服务器端的长连接

我们先启动server端

Netty中如何实现客户端与服务器端的长连接

再启动Html

Netty中如何实现客户端与服务器端的长连接

当链接打开时,显示了链接开启!我们看下服务器端的变化

Netty中如何实现客户端与服务器端的长连接

当链接建立时调用handleradd方法,并且打印了类似UUID的字符串

我们发送数据体验一下

Netty中如何实现客户端与服务器端的长连接

Netty中如何实现客户端与服务器端的长连接

我们对比下除了正常相应内容以外,我们注意下时间

2019-01-20T13:09:14.322

2019-01-20T13:09:14.321

在毫秒级的偏差内到达!!!

我们打开开发者工具,刷新浏览器

Netty中如何实现客户端与服务器端的长连接

网状的中如何实现客户端与服务器端的长连接