这里提的需求基本都是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。怎么办?

最新文章

  1. 《UNIX环境高级编程》笔记——2.标准和实现
  2. SQLite剖析之异步IO模式、共享缓存模式和解锁通知
  3. Ubuntu下matlab快捷键设置
  4. ubuntu apache2服务器配置
  5. CentOS安装Git实现多人同步开发
  6. Android_listView_BaseAdapter
  7. Word文献类型标志
  8. opentesty--luasocket 安装
  9. a标签href不跳转 禁止跳转
  10. 键盘code码速查表
  11. Android 推断当前的界面是否是桌面的方法
  12. Javascript面对对象. 第四篇
  13. 网络AFNetworking 3.1
  14. C++模板--实现容器适配器
  15. Hybris 6.4 + Jrebel
  16. Android基于Retrofit2.0 +RxJava 封装的超好用的RetrofitClient工具类(六)
  17. HTL里面使用sling model的时候传参问题
  18. Linux下配置Redis集群模式
  19. TensorFlow进阶(二)---张量的操作
  20. HDU 4576 Robot

热门文章

  1. linux技能点三 find grep
  2. tomcat 安装记录 centos7 开放对外端口
  3. option触发及获取当前选中的option值
  4. 【Docker】docker安装mysql
  5. Django-模型层(单表操作)
  6. vue2 手记
  7. 如何解决IntelliJ idea的maven工程提示的Cannot Resolve Symbol
  8. ExecutorService java多线程分割list运行
  9. java基础(14)---修饰符
  10. Java7与Java8中的HashMap和ConcurrentHashMap知识点总结