Skip to content

MrYang/netty-learn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 

Repository files navigation

netty4示例

照着网上例子,及自己摸索做了一些示例,按照学习顺序,包括

  • discard

    server端收到client 发送的消息后,啥都不干,直接扔掉

  • echo

    client发送一个消息,server 回复一个消息,使用低级的ByteBuf api, 没有做任何的编解码器

  • time

    server 在 client 连接上时发送一个UnixTime 对象,使用了定长的消息编码器,

    其中在server 需要对发出的信息做编码,所以添加一个TimeEncoder,

    并且不需要解码从client发送的消息,所以serverHandler 使用的是级别较低的ChannelInboundHandlerAdapter,

    client 需要天际一个TimeDecode解码器用于解码从server 端发送的UnixTime对象, clientHandler使用SimpleChannelInboundHandler

    在channelRead0 方法中能直接读取到UnixTime对象

  • chat

    chat 需要双端通讯, 添加了String类型的编解码器,并且在入站时添加DelimiterBasedFrameDecoder作为解包的解码器,

    需要注意入站的顺序,是先使用DelimiterBasedFrameDecoder解决tcp的粘包,分包,再使用StringDecode完成对消息的解码。

    同时server client 的handler都使用了SimpleChannelInboundHandler,这样在读取消息的时候能直接读取StringDecode 解码后的String,

    在发送消息时,在消息的末尾添加'\r\n',DelimiterBasedFrameDecoder就是通过这个对消息做分割

  • codec

    自定义消息编解码器,将消息分为消息头,消息体,被传输对象的对象需要实现Serializable接口

  • heartbeat

    网上通常的做法是服务端在空闲的时候向客户端发送心跳包,客户度收到心跳包后回应一个消息,

    服务端收到消息后,记录该客户端在线,如果长时间没有客户端的心跳消息,则清除这个连接。

    把心跳任务放在服务端的好处是:客户端不是netty或其他语言做客户端时,可以有效减轻客户端的编程难度。

    实现client端的心跳连接,用一个定时任务自动清除没有发心跳包的client。步骤如下:

    • 客户端在空闲的时候(IdleStateHandler)向服务端发送心跳包
    • 服务端在每次与客户端通信时记录该客户端的最后访问时间
    • 服务端维护在线的客户端列表,定时扫描列表,清除长时间(自定义,如5分钟)未与服务端通讯的客户端
  • reconnect

    客户端自动重连,

    • 在启动时没有连接服务器,启动定时任务重新连接
    • 在客户端丢弃连接时,启动定时任务重新连接
  • httpserver

    实现一个httpserver, 浏览器访问http://127.0.0.1:5000/?name=1即可返回一串json信息

  • rpc

    实现简单的rpc 服务, 没有做server 根据client传递过来的的接口,方法名,方法参数等信息查找实现方法,只是简单的返回

  • push

    推送服务,实现一个简单的推送文本消息服务,可以离线存储消息,并使用netty创建一个简单的http server,查看系统的一些状态,如在线设备数量, 推送消息到设备,查看设备是否在线等。

About

netty4.0 一些示例,包括编解码,rpc,httpserver,push server 等

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages