专栏首页用户8870853的专栏详解NIO如何实现群聊?
原创

详解NIO如何实现群聊?

1. 实现步骤

构建Selector以及服务端监听

通道启动监听并处理建立连接请求

处理读数据群发数据

实现客户端测试

2. 服务端实现

2.0 服务端完整代码

服务端的主要功能如下 :

1. 开放监听端口,方法ChatServer构造方法

2. 处理链接请求,方法listener实现连接的建立

3. 读取消息内容,方法readData

4. 转发消息给当前所有在线的人,方法sendData2All

2.1 构建Selector以及服务端监听通道

当ChatServer对象被创建时具体实现步骤如下:

1. 创建serverSocketChannel对象

2. 设置处理模式为非阻塞模式

3. 绑定监听端口

4. 将channel注册到selector中

2.2 实现监听并处理建立连接请求

连接请求处理实现步骤:

1. 获得所有有事件的key, 通过key就可以拿到用户的SocketChannel

2. 循环遍历每一个key,判断当前是读事件,还是建立连接事件

3. 如果是建立连接事件则直接将该通道注册到selector中

4. 如果是读数据事件就交给具体的读数据方法处理数据

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • NIO实现群聊功能,手动实现聊天室

    哈喽大家好,我是IT老哥,今天带大家用NIO实现一个聊天室的群聊功能,废话不多说,直接上代码,肝它。

    公众号 IT老哥
  • Netty干货分享:京东京麦的生产级TCP网关技术实践总结

    京东的京麦商家后台2014年构建网关,从HTTP网关发展到TCP网关。在2016年重构完成基于Netty4.x+Protobuf3.x实现对接PC和App上下行...

    JackJiang
  • 自已开发IM有那么难吗?手把手教你自撸一个Andriod版简易IM (有源码)

    一直想写一篇关于im即时通讯分享的文章,无奈工作太忙,很难抽出时间。今天终于从公司离职了,打算好好休息几天再重新找工作,趁时间空闲,决定静下心来写一篇文章,毕竟...

    JackJiang
  • 自已开发IM有那么难吗?手把手教你自撸一个Andriod版简易IM (有源码)

    一直想写一篇关于im即时通讯分享的文章,无奈工作太忙,很难抽出时间。今天终于从公司离职了,打算好好休息几天再重新找工作,趁时间空闲,决定静下心来写一篇文章,毕竟...

    JackJiang
  • 彤哥说netty系列之Java NIO实现群聊(自己跟自己聊上瘾了)

    上一章我们一起学习了Java中的BIO/NIO/AIO的故事,本章将带着大家一起使用纯纯的NIO实现一个越聊越上瘾的“群聊系统”。

    彤哥
  • NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战

    本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo。服务端将分别用MINA2和Netty4进行实现,而...

    JackJiang
  • 一文归纳总结分布式架构的那些事!

    进入十一月,最火热的话题与期待的日子自然是双十一狂欢购物节了,作为程序员的你除了要清空自己的购物车之外,最关心的是不是双十一架构技术是如何承受亿级用户流量的冲击...

    Java架构
  • 一文读懂高性能网络编程中的I/O模型

    随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力。本文(和下篇《高性能网络编程(六):一文读懂高性能网络编程中的线程模型》)旨...

    JackJiang
  • 一文读懂高性能网络编程中的I/O模型

    随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力。本文(和下篇《高性能网络编程(六):一文读懂高性能网络编程中的线程模型》)旨...

    JackJiang
  • 作为一个Java架构师程序员 你应该会什么

    一,JAVA架构师 1、语法:Java 程序员必须比较熟悉语法,在写代码的时候IDE 的编辑器对 某一行报错应该能够根据报错信息 知道是什么样的语法错误并且知道...

    Java高级架构
  • 适合新手:从零开发一个IM服务端(基于Netty,有完整源码)

    站长提示:本文适合IM新手阅读,但最好有一定的网络编程经验,必竟实践性的代码上手就是网络编程。如果你对网络编程,以及IM的一些理论知识知之甚少,请务必首先阅读:...

    JackJiang
  • JAVA程序员如何提升自己?

    加米谷大数据
  • 【NIO】NIO版本鸿儒聊天室

    喜欢天文的pony站长
  • NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战

    本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo。

    JackJiang
  • 集群、限流、缓存 BAT 大厂无非也就是这么做

    前阵子有网友询问,如何优化网站?这个问题真的很大,跟他简单的聊了一下,随便说了几点,觉得有必要整理一篇文章出来,正好前阵子在做爬虫博客,于是把大体思路分享出来,...

    小柒2012
  • 第一次听人用男女关系讲 N(Non-Blocking)I(进)O(出),涨姿势了

    这是男生唯一心动的女生,所以一直守着自己的 BP 机,等待女生回复,就这样一天过去了,直到:

    好好学java
  • 从春节送祝福谈谈 IO 模型(二)

    上期结合程序员小猿用温奶器给孩子热奶的故事,把面试中常聊的“同步、异步与阻塞、非阻塞有啥区别”简单进行普及。

    一猿小讲
  • 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别

    本文引用了“架构师社区”公众号的《史上讲的最好的Java NIO与IO的区别与应用》一文部分内容,感谢原作者的技术分享。

    JackJiang
  • 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别

    很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,...

    JackJiang

扫码关注云+社区

领取腾讯云代金券