这里的第一个问题。我搜索了这个,但没有找到任何完全解决我的问题的解决方案。我正在使用c ++,需要编写一种usp聊天(服务器和客户端),以便程序互相交互。好吧,它运作得很好。
我正在使用Googles protobuf作为消息。
我是这样写的:服务器有一个用户登录的用户列表以及要处理和分发的消息列表。
一个线程处理其套接字上的所有接收(我使用一个套接字)。 如果消息中的命令var是登录, 它查看列表并检查端口和IP的这种组合。如果不在,聊天会创建一个新的用户条目。
如果命令注销,服务器在列表中查找用户并删除它。
如果命令是消息,则服务器查看用户是否已登录并将其放在消息列表中。
第二个帖子是发送。 它等待,直到列表中有消息,然后遍历所有用户将此消息发送到除发送消息之外的插槽。
服务器已在其套接字上设置选项以从任何IP接收。
我现在的问题是:这是最佳的解决方案吗? 我读过有关选择和民意调查的内容。但它总是关于多个接收插座,而我只有一个。 我知道接收线程可能一直处于空闲状态,但在我的环境中会有高频率的消息输入。
我对套接字编程很新,但我认为这是最优雅的解决方案。我想知道我是否甚至可以创建另一个线程,它从接收线程获取一个列表来处理消息。
编辑:我怎么能发现超时? 我的意思是我可以在用户列表中有一个变量增加或设置为0.但是如果消息不会频繁出现怎么办呢。也许基于服务器的ping消息?或者可能是消息上的一个标志,它被设置为已确认并重新发送。
在用户端,我需要首先广播以找到服务器,然后根据答案设置端口和向上。我怎么能这样做?
因为这应该是自主的。这意味着客户端应该检测服务器,登录,发送命令并检测它是否仍在线。
在服务器端,我不知道这是否如此重要。如果连接的东西太多而且没有注销,可能会出现内存问题。也许我设置1小时超时让它检测空闲客户端。