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