关于使用nio实现广播数据给所有已连接客户端
来源:互联网 发布:数据库的备份策略 编辑:程序博客网 时间:2024/06/03 16:00
NIO基础学完了,NIO学会不难,但是能达到实际做项目的地步还是需要花很大的精力和时间来专研的,若不能非常熟练使用NIO,那么NIO对你来说就是一个坑,你会发现辛辛苦苦写完的程序会出现各种问题,特别是在较大并发、较大数据量时,问题会非常的明显。
之前写的一遍博客《Java NIO实战之聊天室》,这个小程序其实是有问题的,在低并发的情况下可以较好的运行,但是在很多客户端同时连接服务器的高并发情况下就会出现问题,目前经过测试在很多客户端同时连接服务器时会抛出ConcurrentModificationException。其原因是在遍历已注册键时,有客户端连接修改了Selector的已注册键集合。这几天我也一直在思考如何解决这个问题,但是一直没想到一个自觉非常完美的解决方案,在网上也找了很多文章看,但很难找到答案。目前自己能够想到的方案就是单独维护客户端通道的Map,并对这个Map同步,当有客户端连接时,先对这个Map加锁,然后将客户端SocketChannel加入这个Map,若无法获得锁就等待;当遍历这个Map进行转发消息时,也先对这个Map加锁。感觉这样做是一种非常低性能和比较笨的办法。但是到现在也没有找到一个非常好的解决方法,可能是对NIO理解的还不够深入,还需苦逼专研。
为了不浪费时间,NIO我先放一边,虽然对NIO还没有达到运用的非常熟练的地步,但是基本用法及核心类API都了解的非常清楚了。现在开始学习netty,希望能用netty从寻得启发。网上都说现在用java开发网络程序首选netty,因为netty封装的好用、性能高、社区活跃,之前面试了2家游戏公司,他们在项目中也是用的netty,决定专研netty。netty学会了,希望能坚持下去再学学mina。技术人得有技术人应有的态度,呵呵。
- 关于使用nio实现广播数据给所有已连接客户端
- FMS3向所有客户端广播消息的实现
- Asio服务端连接管理,实现广播数据
- 使用AIDL实现IPC通信之——实现服务端主动发送数据给客户端
- Java nio 客户端连接Server
- 所有客户端连接Openvpn
- Android 使用Mina的Nio实现客户端服务器通信
- 使用server发送广播给activity实现网络延迟功能
- 基于NIO的长连接的实现已开放到github
- Nodejs socket.io 实现私聊:如何给指定客户端发送消息,不是群广播
- Nodejs socket.io 实现私聊:如何给指定客户端发送消息,不是群广播
- 查询使用某个用户连接到数据库的所有客户端
- 网上关于NIO客户端断开连接出现死循环的bug修复
- 客户端连接数据时会报“ORA-12537:TNS连接已关闭”
- Android 使用Socket实现服务器与手机客户端的长连接三:clientA 发送给clientB,定点发送
- 关于从后台传来的json数据,使用jquery动态展现所有的item,给每个item添加删除功能
- Android使用NIO开发客户端
- Android使用NIO开发客户端
- mysql中文显示乱码
- 随机指示变量(Indicator Random Variables)
- 01javaSE基础 javaSE环境变量
- ParameterizedType获取java泛型参数类型
- [我要当火影]火影之路(Road To Hokage)
- 关于使用nio实现广播数据给所有已连接客户端
- 生产者和消费者引出的多线程通信
- ACM:二分查找,以及利用二分法来找上下界
- ViewPager获取当前显示的View
- Delphi2007升级到Delphi 2010总结
- java常见错误以及可能原因集锦
- Java实现表达式求值(原创,跟书上的不一样)
- UVA 11885 - Number of Battlefields(斐波那契)
- 曾被追逐的流量正在遭遇贬值