WebSocket是一个出色的协议,它基于TCP,与HTTP网络协议兼容。通过WebSocket,我们可以实现客户和服务器方面的即时消息传递,从而消除了由多个客户端造成的性能损失。
由于Websocket如此出色,因此如何在Netty中使用Websocket?
尽管WebSocket是一个与HTTP协议完全不同的单独协议,但它仍然放在Netty中的HTTP软件包中。LET对Netty中的各种协议的支持。如果您想支持此协议,则是解码器和编码编码器必须需要解码器来编码协议。将传输数据从字节布夫转换为协议类型,或将协议类型转换为bytebuf。
这是Netty工作的核心原则,也是随后的自定义Net扩展的基础。
那么Websocket是什么?
作为协议,Websocket自然不会出来稀薄的空气。通过持续开发,它已经达到了当今的Websocket协议。我们不会深入介绍Websocket的开发历史。LET首次查看Netty提供的各种Websockets的版本。
在WebSocketversion类中,我们可以看到:
WebSocketversion是一种枚举类型,它定义了Websocket的4个版本。除了未知之外,我们还可以看到Websocket的版本具有0、7、8和13。
我们知道Websocket的消息通过帧传递,因为不同Websocket的版本会影响帧的不同格式。因此,我们需要不同的FramedeCoder和FrameEncoder在WebsocketFrame和Bytebuf之间进行转换。
由于WebSocket有四个版本,因此有4个版本的解码器和编码器:
至于每个版本之间的框架之间的差异,我们不会在这里谈论它。有兴趣的朋友可以关注我的关注文章。
熟悉Netty的朋友应该知道它是否是编码器和解码器,他们在频道中起作用。
Netty提供了一个WebSocketServerHandShaker类来使用编码器和解码器。NETTY提供了出厂类WebSocketServerhandhandshakerFactory。根据客户端请求Header的Websocket版本,它返回不同的WebSocketServerHandshaker。
同样,我们可以看到Netty还定义了4个不同的WebSocketServerHandshaker。
Handleshake方法在WebSocketServerHandshaker中定义。
在每个WebSocketServerHandshaker的特定实现中,定义了两个NewWebockocketCoder和NewWebSocketDecoder。
所有Ecode和Decode均在WebSocketFrame和Bytebuf.WebSocketFrame中转换为DefaultByteBufHolder的继承,表明它是一个Bytebuf Container.in,除了保存BYTEBUF,它还具有两个附加属性,这些属性是FinalFragment和RSV。
FinalFragment表示,该框架是否是最后一个帧。对于大量数据量的消息,该消息将分为不同的框架,这特别有用。
让我们看一下Websocket协议消息的格式:
RSV表示消息中的扩展字段,即RSV1,RSV2和RSV3。
此外,Bytebuf的一些基本操作。
WebSocketFrame是一个抽象类。其特定的实施类具有以下内容:
BinaryWebSocketFrame和TextWebSocketFrame已熟悉,它们代表了两种消息传输方式。
CloseWebSocketFrame是一个关闭连接的框架。ContinuationWebsocketFrame代表消息中框架的表示多。
pingwebsocketFrame和PongwebSocketFrame是两个特殊框架。它们主要用于服务器和客户端检测。
这些帧对应于Websocket的消息类型的类型,该消息类型了解Websocket的消息类型的类型,并且了解这些帧类非常有帮助。
说到Websocket的许多原则和实施类别,下一个是实际战斗。
在此示例中,我们使用Netty创建WebSocket服务器,然后使用浏览器客户端访问服务器。
创建WebSocket服务器和普通Netty服务器的过程并没有什么不同。就在ChannelPipeline中,您需要添加一个自定义的WebSockEcketServerVerler:
这个WebSocketServerHandler需要做什么?
它需要同时处理普通的HTTP请求和Websocket请求。
这两个请求可以根据接收的味精类型的差异来判断:
在客户端连接到Websocket之前,您需要借用当前的频道以打开handleshake:
获得握手后,我们可以处理后续的WebSocketFrame:
在这里,我们只是一个机械返回消息。您可以根据不同的业务逻辑分析消息。
在服务器端,如何连接客户端?构造WebSocket对象,然后处理各种回调非常简单:
以上是使用Netty构建WebSocket服务器的完整过程。本文中的服务器还可以同时处理普通的HTTP请求和Websocket请求,但这是否有些复杂。有一个简单的方法吗?请继续关注。
本文的示例可以参考:Learn-netty4
最受欢迎的解释,最深的干货,最简单的教程,您不知道的许多技巧正在等待您发现!
欢迎注意我的公共帐户:“程序的事情”,了解技术并更好地了解您!