最近项目的一个功能需要用netty做一个聊天服务,要用时时 所以老大让我看下netty.
以前都是玩的web项目, 思想都已经固化了,只认得 请求-返回这种服务器与客户端交互方式,所以在初次接触到netty的时候总是理解不了。我要记下来这几点:
1.netty 消息是如何传递的
netty服务器在收到消息时,同时也拿到了消息发送的管道(channel),服务器可以对这个管道直接推送消息(writeAndFlush)
推过去之后该管道的另一端即是客户端 就收到了消息。
我一开始看各种即时通讯demo的时候最不理解的就是这一点了,不明白消息是如何抵达客户端的,有人说源码里面这些都写了,
我想说 当我拿到源码的时候 我是完全不知道每一行的代码什么意思的。看了三天的demo 每次都看到睡着,强制自己不睡硬看,头就疼了 ,不睡一觉缓解不了。那种偏头痛 好像脑袋里的一根筋一突一突的涨疼。
我一直到第四天看了五六个demo之后,慢慢的去比较他们的不同,才逐渐发现 每个对象的用处,这时候每行代码的意义大致也都懂了,也不困了。思路豁然开朗。
2.netty如何实现推送给指定的客户端
这个真是会的不难 难的不会。其实想通了上面一个问题之后 这个问题已经不算什么问题了
netty服务器可以获取所有的激活的管道(channel),客户端在创建连接时(即创建channel)可以把channel与客户端的ID放到一个全局静态Map里面,当你想给特定的管道推送消息时,通过客户端Id找到对应的管道,给它推就行了。
我看的初级netty 简单通讯demo里面都是对所有的channel遍历发送,或者只对一个客户端发送,所以当时特别迷惑怎么给特定的客户端推送。直到我又读了个demo,发现了规律....
以上就是两点小白最困惑的地方了。后面或许还有 但是别怕 多百度,多看 总能解决的。