问一个较难的问题:如何能保证服务器拥有稳定良好的性能?
我在开发程序的过程中发现有几个问题:
1、怎样可以保证服务器的客户量不会太大?
因为存在这样一个问题,客户太多,会导致服务器发送数据包很缓慢,半天客户端才收到一个包。我曾经试图这样做过
⑴onaccept:
while (g_socklist.size()>MAX_CLIENTNUM)Sleep(100);
SOCKET sk = accept(m_listensock);
⑵onaccept:
SOCKET sk = accept(m_listensock);
if (g_socklist.size()>MAX_CLIENTNUM)
{
shutdown(sk);
closesocket(sk);
}
上面的两种模式我试用都存在问题,我在单机上没发现问题,一旦投入实际使用后,
第一种方法在过一段时间后,会出现,客户端发送任何包都会失败。第二种方法死得更难看,过一段时间后,服务器根本就不响应任何连接,客户端连接直接就失败了。
这个问题十分的困扰我,希望有大侠可以教我。
2、怎样检测服务器数据包的流量???保证在流量达到服务器的限制或者说达到当前网络可以容忍的峰值的时候降低客户数量数量。
这个问题我根本想不到办法,主要原因在于我根本没办法检测是否达到服务器的瓶颈?而且个人对数据包流量这种东西没有概念。
3、第三个问题是我前几天得人启示才想到的,如何保证服务器和客户端没有任何包传输的情况发现物理连接已断开??前几天遇到有个家伙问我如何能够保证在没有RECV没有SEND的情况下检测出连接已断开?我实在无法回答,这令我觉得讨厌。我想过另外开线程来检测,但是这种方法让我觉得不理想,对于一个多线程程序,为了保证对全局连表操作的正确性,而使用互斥量或者其他来保证数据的正确性的时候,不得不让其他线程呆呆地等好长一段时间。
主要就这三问题,希望有大侠慷慨援手,^_^