TCP服务端,海外用户的问题。
TCP短连接,大约有800-1000个活跃客户端,以后可能会继续增长,其中有50%以上是海外线路。
每一个客户端每隔1分钟需要跟服务端通信一次,一次有数条请求,整个流程正常情况下会在5s-10s内完成,都是一请求一应答,没有IO并发。
目前大概每1分钟大约存在10-15个超时连接(检测到之后强制关闭),超时时间是30秒。
IOCP模型,4个工作线程,单独的一个线程在检测超时,但工作线程对winsock的任何操作以及超时关闭连接操作,都是收拢到单线程了(我采用了一个独立的消息线程来调用winsock api,把调用GetQueuedCompletionStatus的4个线程作为业务逻辑线程来使用),不会存在同步问题。
可以确定的是服务端带宽是足够的,大陆IP没有任何问题,目前所有超时连接,都是港台IP,客户端有重连机制。
从日志可以看到,所有超时的连接,分为两类:
1、已经连上之后,但是服务端并没有收到任何数据(也就是连上之后可能就已经是死连接了)。
2、在断开连接时(DisconnectEx 超时)
我想知道这是什么原因,如果是TCP内部的问题,有没有办法补救,因为,重连会导致服务端和数据库的一些额外开销,如果考虑做海外分流,在必须统一数据的前提下,那么数据库服务端,应该找什么服务器来承载?