关于java nio的channel读写的一个困惑
2024-08-29 04:13:38
这里提的需求基本都是IM的,IM的解决方案是怎么样的?
网上的需求:
1. 某一用户发了一条信息, 需要服务器反回一个信息(这种最简单)
2. 某一用户发了一条信息,需要服务器广播给所有客户端
3. 某一用户发了一条信息, 需要服务器发给指定的几个客户端
4. 用户没有发信息,服务器跟据某些需要主动发给所有客户端信息
5. 用户没有发信息,服务器跟据某些需要主动发给指定的几个客户端信息
6. 用户发了一条信息,服务器只需计算不需反回。
我想了想如下:
socketchannel好像只能监听读或者写,如果 server一直向client发数据,期间client可能向server发数据,为了避免server没有错过接受数据,是不是可以在这样处理:
while(true){
if(可读){
读数据;
监听"写";
}else if(可写){
写数据;
监听"读";
}
}
监听write,可写的话执行相关操作,完了马上监听read,可读的话,执行相关操作,不断切换监听read 和write ,即使这个时候server 仍然还有数据要写,而client可能还没有写数据。会不会效率低,浪费。但是关键是如果对这个channel监听read后,而client没有写数据,下一次select的时候不能获得这个channel,不能写数据了,而server写数据的前提必须是client写数据导致server端发现channel可读,而通过select获得这个channel。怎么办?
最新文章
- 《UNIX环境高级编程》笔记——2.标准和实现
- SQLite剖析之异步IO模式、共享缓存模式和解锁通知
- Ubuntu下matlab快捷键设置
- ubuntu apache2服务器配置
- CentOS安装Git实现多人同步开发
- Android_listView_BaseAdapter
- Word文献类型标志
- opentesty--luasocket 安装
- a标签href不跳转 禁止跳转
- 键盘code码速查表
- Android 推断当前的界面是否是桌面的方法
- Javascript面对对象. 第四篇
- 网络AFNetworking 3.1
- C++模板--实现容器适配器
- Hybris 6.4 + Jrebel
- Android基于Retrofit2.0 +RxJava 封装的超好用的RetrofitClient工具类(六)
- HTL里面使用sling model的时候传参问题
- Linux下配置Redis集群模式
- TensorFlow进阶(二)---张量的操作
- HDU 4576 Robot