When one of the nominated network events occurs on the specified socket s, the application window hWnd receives message wMsg. The wParam parameter identifies the socket on which a network event has occurred. The low word of lParam specifies the network event that has occurred. The high word of lParam contains any error code.
每次客户端连上服务器的时候,都先发送自己的客户ID号码,这个时候在服务器的FD_READ中,您就可以
收到这个客户ID,然后您可以用这个客户ID查找数据库,看是否存在这个客户ID,如果不存在发送客户一个通知,如果存在,您这个时候将这个客户ID和WPARAM这个SOCKET绑定,并且也要发送客户一个通知,当客户收到这个通知字符串的时候,就可以进行相应的处理了。当客户下线的时候,在您的FD_CLOSE中,您根据<SOCKET-客户ID>的在线客户链表,以SOCKET为关键字,然后再删除相应的<SOCKET-客户ID>,检测用户下线,可以使用心跳包。以上是我的见解,希望对您有用。
服务端程序用cpu20% 周边 总计系统40%都在处理. 客户端边0-70毫秒的接收延迟. 内网测试再多开100连接.即200个客户连接,测试. cpu33-50% 周边 总计消耗系统70-80% 再多开一个连接,测试收发延迟,依然快速,0-70毫秒之间延迟,大部分0.
再多开100连接.300个连接,进程占cpu 60-70% 管理器下的cpu使用已经100%了. 再多开一个连接测试收发延迟.达到了100-5000之间,一次发的越快越多,延迟越长。。
看来基于窗口消息的sock模型也就只能满足100-300的小型网络服务了.