套接字数目不够

caochenchen2012 2012-07-22 05:20:23
聊天室开发遇到个技术问题


服务器有有个通知线程

如:有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管理的 和一个监听套接字。
...全文
307 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
arhat8008 2012-07-24
  • 打赏
  • 举报
回复
太高深了
hua0ge0 2012-07-24
  • 打赏
  • 举报
回复
有人上线或离线就服务器发送更新在线列表的消息给用户啊,用户需要判断消息的类型
caochenchen2012 2012-07-22
  • 打赏
  • 举报
回复
我采用的正是你说的第一种

数据包类是由标志判断 何种类型,心跳包,聊天记录,认证,等等。

对于一个客户端 要发送诸多包出去。 一个包代表了在线用户。

不是很少。但也没有好法子。

谢谢你了

我结贴了





[Quote=引keyi qu 用 8 楼 的回复:]

服务端主动推送,你4楼的描述是问题的,此外好像也没别的好方法。
这样客户端在收到的消息时需要区分是聊天记录还是在线列表,然后再做相应的处理,区分标识服务端和客户端定好就可以了。

再一种方式可以考虑使用udp方式来传递在线列表消息。
服务端启动指定端口如4567来向客户端发送在线列表的udp消息(sendto),客户端需要用另一个套接字来接收服务端4567端口发来的udp消息然后处理(r……
[/Quote]
sundayX 2012-07-22
  • 打赏
  • 举报
回复
服务端主动推送,你4楼的描述是问题的,此外好像也没别的好方法。
这样客户端在收到的消息时需要区分是聊天记录还是在线列表,然后再做相应的处理,区分标识服务端和客户端定好就可以了。

再一种方式可以考虑使用udp方式来传递在线列表消息。
服务端启动指定端口如4567来向客户端发送在线列表的udp消息(sendto),客户端需要用另一个套接字来接收服务端4567端口发来的udp消息然后处理(recvfrom),但此方式需要维护一个客户端的ip列表,即map是用户id和客户ip的字典,与上面一种方式多大差别。
caochenchen2012 2012-07-22
  • 打赏
  • 举报
回复
我恰好是服务器主动发送,用户列表

开了个线程来做这个事情。

请问4楼,如何改进?

前提;服务器主动发送出去。

原因:我已经写好部分,不像改了

[Quote=引用 6 楼 的回复:]

如果用户数很多,这种处理上效率是否存在问题?即使是多线程,在处理时也是占用CPU时间片的。
考虑使用定时更新呢,在客户端启动一个计时器(比如说10s),定时从服务器更新最新在线用户列表。
[/Quote]
sundayX 2012-07-22
  • 打赏
  • 举报
回复
如果用户数很多,这种处理上效率是否存在问题?即使是多线程,在处理时也是占用CPU时间片的。
考虑使用定时更新呢,在客户端启动一个计时器(比如说10s),定时从服务器更新最新在线用户列表。
caochenchen2012 2012-07-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

楼主是对套接字不懂么?
[/Quote]


有和高见
caochenchen2012 2012-07-22
  • 打赏
  • 举报
回复
服务器维护着和客户端a的套接字

b的套接字
c的套接字

如果从map中取出a来,然后 用a发送2个包,给客户端a

告知b,c在

取出b来,然后用b发送2个吧奥,给客户端b

告知a,c在

依次类推。。

是否太糟糕的做法

W170532934 2012-07-22
  • 打赏
  • 举报
回复
楼主是对套接字不懂么?
pathuang68 2012-07-22
  • 打赏
  • 举报
回复
假定是TCP的方式,一个连接是由:
服务器的IP + 服务器的port + 客户端的IP + 客户端的port
来确定的。

很显然服务器的IP和port不会随便更改(假定服务器的IP是唯一的,port也是唯一的)
但客户端的IP和port是可以随意的。

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧