套接字数目不够
聊天室开发遇到个技术问题
服务器有有个通知线程
如:有3个客户端a,b,c
这个线程的功能就是通知a客户 , bc在线
通知b客户,ac在线
c客户,ab在线。
服务器维护着一个map
map<用户id,一个类>mymap
这个类的定义为:
class XX
{
public:
CClientSocket* psock;
用户id;
};
通知线程的设计是遍历这个map,
获取map中的类指针,最后获得psock.
获得后,我就无语了。
需要有一个套接字对 map管理的 客户端发送 在线用户表。
我不知道哪一个套接字去发送呢?
套接字就map管理的 和一个监听套接字。
[解决办法]
服务端主动推送,你4楼的描述是问题的,此外好像也没别的好方法。
这样客户端在收到的消息时需要区分是聊天记录还是在线列表,然后再做相应的处理,区分标识服务端和客户端定好就可以了。
再一种方式可以考虑使用udp方式来传递在线列表消息。
服务端启动指定端口如4567来向客户端发送在线列表的udp消息(sendto),客户端需要用另一个套接字来接收服务端4567端口发来的udp消息然后处理(recvfrom),但此方式需要维护一个客户端的ip列表,即map是用户id和客户ip的字典,与上面一种方式多大差别。