跪求类似于QQ聊天服务器/客户端搭建思路,倾家荡产级散分,不过了!该如何解决

跪求类似于QQ聊天服务器/客户端搭建思路,倾家荡产级散分,不过了!
最近想搞搞IM聊天之类的东东,之前搞过一些简单的,现在想搞点专业点的。现在列举下自己的一些疑问,望各位高人指点下。
1.实时监测好友的状态改变,利用心跳的方式是不是最佳方式?还是自己状态改变后,利用服务器通知自己的好友?
2.客户端发送数据一个线程,接收数据一个线程够不够用?当同时接收到多条记录时,该如何处理?
3.发送数据时,假如我们传输的是一个文件,在文件数据发送完毕前,再发送文字信息,这时该如何处理?
4.服务器端同时收到多个客户端发来的数据时,该如何处理?也就是说recv一个客户端的数据时,又接收到另一个客户端发来的数据。
5.A向B发送信息,通过服务器转发,信息中携带了A和B的唯一标示ID,服务器怎么找到与B建立的连接?
望高手不吝赐教~~~~全部分都在这一个帖子上了,好害怕啊。
------解决方案--------------------
没做过,以我的有限认识来回答一下楼主的问题

1、心跳包是最好的检测客户端是否在线的方法,也是唯一的方法。(拔网线、停电 服务端无法收到通知)
2、客户端应该没必要做多线程。
3、发送文件一般通过p2p,或者上传服务器时应该是用ftp,都是另起线程来做,跟发送聊天数据应该是不同的模块。
4、服务端要用IOCP模型,当然是多线程的。
5、每个客户端连到服务器后他的socket对象就是唯一的,而服务器应该将此socket跟他的唯一标识id绑定。
------解决方案--------------------
引用:
引用:

没做过,以我的有限认识来回答一下楼主的问题

1、心跳包是最好的检测客户端是否在线的方法,也是唯一的方法。(拔网线、停电 服务端无法收到通知)
2、客户端应该没必要做多线程。
3、发送文件一般通过p2p,或者上传服务器时应该是用ftp,都是另起线程来做,跟发送聊天数据应该是不同的模块。
4、服务端要用IOCP模型,当然是多线程的。
5、每个客户端连到服……

你能有多大的连接量
用map应该足够了
------解决方案--------------------
我之前研究过聊天系统,我来讲下自己的思想
1.服务器端可以维护一张用户状态列表(客户名,ID,IP,状态,等等),每个用户登录,暂离,聊天,登出和断线都在该表中能够显示出来,各种客户端只要连上服务器,服务器就为该客户注册一个ID,然后改变其状态。
聊天系统很关键的就是客户端的状态问题,通过客户端之间的心跳包感觉效率低下
2.客户端发送数据不需要线程,简单点发送即可
3.transmitfile这个函数知道不知道,可以百度下,用这个函数就不用考虑文件和聊天消息的切换了
4.用IOCP,网上例子很多,随便搜搜
5.和第一个问题差不多,只要在列表中搜索一下就行了

至于聊天内容,客户端可以与客户端直接通信,服务器只负责列表,这样就减少了服务器的压力。当然也可以客户端通过服务端转发,这样的话,服务端功能会更多一点
小小见解,有问题的话可留言讨论