用mfc基于tcp写的聊天软件性能改进求助。
这几天一直在写一个聊天程序。基于tcp的,原来打算用udp,后来觉得无连接的不靠谱,就写了个基于tcp的。分为客户端和服务器端,服务器负责处理客户端的请求。
开始时服务器绑定一个ip监听一个端口,在mfc定义了一个WM_SOCKET消息,一旦有消息进来,OnSocket函数会被调用。它里面处理连接进入和连接关闭,以及有内容发送进来。这三个消息。
当有新连接进入,服务器将接受它的连接,并把它添加到当前在线用户列表中。并将当前列表的内容发给所有客户端,让们更新好友列表。
当有连接断开,服务器将断开的连接从当前列表删除,并将当前列表的内容发给所有客户端,让他们更新好友列表。
当服务器收到客户端发来的内容时,如果是要转发给其他客户端,服务器会提取出转发的目的地址和转发的内容,然后将消息转发出。
我在自己的机器上试验了很多次,也开了好几个客户端,反应都很快。无论是转发消息还是通知各客户端更新列表。
当我在局域网内的其他机器上也试验下,其他机器的客户端给我机器上的客户端发消息时每次都有很大的延迟,一旦消息发的快了还会丢收不到。但反过来就没有问题。
采用了几种改进方法:
1,新建线程,使用事件对象。在InitInstance时创建线程,
while(1)
{
WaitForSingleObject(hEvent....);
执行动作。
}
然后要转发的消息到来时,SetEvent();
2:采用线程池。由系统对各线程进行管理。
两种方法都试过,都是跟原来没有区别。不知道这么回事。求前辈指教。谢谢。