随笔分类 -  通信

摘要:1、点对点 1)、最简单 2)、work prefetch=1:同一条任务只能被一个消费端获取并处理。 2、广播(发布/订阅) 1)、fanout:向所有消费端广播 2)、direct:根据不同的消息向指定消费端发送 当error消息时,发送给queue1;当info、error、warning时发 阅读全文
posted @ 2019-05-06 14:02 遥远2 阅读(153) 评论(0) 推荐(0)
摘要:改造timer,即客户端与服务端建立连接后,服务端主动向客户端发送当前时间。 server: TimeServerHandler TimeEncoder 注意: 1、在TimeServerHandler中,ctx.writeAndFlush(new UnixTime()),已经writeAndFlu 阅读全文
posted @ 2018-10-30 09:30 遥远2 阅读(124) 评论(0) 推荐(0)
摘要:ObjectEchoServer ObjectEchoServerHandler ObjectEchoClient ObjectEchoClientHandler 阅读全文
posted @ 2018-10-30 09:30 遥远2 阅读(151) 评论(0) 推荐(0)
摘要:报:Failed to mark a promise as success because it has succeeded already 解决: 法1:write方法中的promise去掉。因为,write中带参数 promise,会自动执行promise.setSuccess(); 法2:去掉 阅读全文
posted @ 2018-10-30 09:30 遥远2 阅读(659) 评论(0) 推荐(0)
摘要:问题:我写了MyDecoder which extends ByteToMessageDecoder,单线程没问题,但是多线程时,报'the handler should be sharable'。查看ByteToMessageDecoder,发现其不能被@sharable。 解决: 在Channe 阅读全文
posted @ 2018-10-30 09:29 遥远2 阅读(250) 评论(0) 推荐(0)
摘要:本节大纲: 1、Handler的执行顺序2、自定义二进制协议(每条完整数据的组成),从而解决拆包和粘包。3、通过为每个channel创建新的handler,从而解决即使handler中使用全局变量,也可以避免竞态条件。 1、Handler的执行顺序。 2、自定义二进制协议(每条完整数据的组成),从而 阅读全文
posted @ 2018-10-30 09:29 遥远2 阅读(752) 评论(0) 推荐(0)
摘要:从InBound里读取的ByteBuf要手动释放,还有自己创建的ByteBuf要自己负责释放。这两处要调用这个release方法。 write Bytebuf到OutBound时由netty负责释放,不需要手动调用release。 http://netty.io/wiki/reference-cou 阅读全文
posted @ 2018-10-30 09:29 遥远2 阅读(281) 评论(0) 推荐(0)
摘要:客户端: 或者 或者 服务端: 1、继承SimpleChannelInboundHandler或ChannelInboundHandlerAdapter的server端 如果是短链接,必须在服务端关闭该channel。此时,才能通知到客户端的chanel.future.close()方法。 2、需要 阅读全文
posted @ 2018-10-30 09:29 遥远2 阅读(1179) 评论(0) 推荐(0)
摘要:TCP/IP,传输的是byte[],将byte[]放入队列中。可能会发生粘包和拆包。 比如,客户端向服务端发送了2条消息,分别为D1,D2,可能产生的情况,如下图所示: 情况一:正常的。 情况二:粘包。 情况三:拆包。即:部分数据不是一次完整发送的,而是分了至少2次发送。 如本例,D2拆成了D2_1 阅读全文
posted @ 2018-10-30 09:28 遥远2 阅读(348) 评论(0) 推荐(0)
摘要:一、DiscardClientHandler 1、发送消息 2、接收服务器返回的消息。由于服务端没有返回消息,所以此处忽略。 3、发送消息后,根据结果的处理。如果成功,继续发送消息;否则,抛出异常,关闭channel。 二、DiscardClient 运行结果: 服务端: 客户端: 阅读全文
posted @ 2018-10-30 09:28 遥远2 阅读(259) 评论(0) 推荐(0)
摘要:本节介绍TIME协议。该协议与前边的discard协议和echo协议的不同点在于:1、服务端主动发送消息给到客户端,所以需要channelActive()方法。2、发送的消息是4个字节的int3、不接收来自客户端的任何请求,所以不需要channelRead()方法。4、一旦消息发送完毕,就关闭该co 阅读全文
posted @ 2018-10-30 09:28 遥远2 阅读(135) 评论(0) 推荐(0)
摘要:一、DiscardServerHandler 1、DiscardServerHandler extends ChannelInboundHandlerAdapter。ChannelInboundHandlerAdapter是ChannelInboundHandler的实现。ChannelInboun 阅读全文
posted @ 2018-10-30 09:27 遥远2 阅读(249) 评论(0) 推荐(0)
摘要:上节介绍的是discard协议,即不给客户端返回消息。本节主要说下,echo协议,即服务端收到消息后原样返回给客户端。 为了实现此需求,只需要在DiscardServerHandler中重写channelRead()方法,即可。如下: 1、ChannelHandlerContext对象提供了很多方法 阅读全文
posted @ 2018-10-30 09:27 遥远2 阅读(194) 评论(0) 推荐(0)
摘要:本文转自:https://www.jianshu.com/p/0bff7c020af2 对于服务端: option():用于设置ServerChannel的选项,如:NioServerSocketChanne,来监听和接收connection。作用于当bind() 时。 childOption(): 阅读全文
posted @ 2018-10-30 09:27 遥远2 阅读(643) 评论(0) 推荐(0)
摘要:TimerServer: TimeServerHandler TimeEncoder 注意: 在TimeServerHandler中,ctx.writeAndFlush(new UnixTime()),已经writeAndFlush了,所以执行过程:TimeServerHandler(write) 阅读全文
posted @ 2018-10-04 09:45 遥远2 阅读(550) 评论(0) 推荐(0)