Bootstrap

Web IM 技术摘要

原创,转载请注明出处(@blog.csdn.net/redvalley)。

 
Web IM,类QQ和MSN,Web(非GUI)实现,支持集群。
 
要点
 
1.采用长连接,及时响应消息;
       使用Tomcat6的Comet特性
       注:Read事件在POST数据情况下发生,GET方式不会产生Read事件。
 
2.消息机制
       参与对象:
              用户:User
              群:Group
              参与者:Peer(群成员)         
 
       服务端:
              集群主机(A类) 1...n主机(B类)
              A----Database
              A、B之间通过http/tcp...协议通讯
       职责:
              A类主机负责数据存取以及产生消息事件;
              B类主机传递消息,并根据消息更新自身状态(集群主机同步);
              B类主机状态包含:Logined User/Active Group/Group Peer
 
       客户端:
              客户端保持对服务器的长连接(setTimeout,确保只有一个连接);
              连接返回信息(消息)再分派:系统消息、Group消息...
       消息传递:
              Client---监听消息(长连接);
              B类主机为长连接添加事件监听;
              B类主机监听A类主机事件;
              Client--->发送请求(普通请求,短连接)--->B类主机接收,转至---->A类主机;
              A类主机根据请求处理DB,并fireEvent...--->B类主机接收,B类主机根据Event信息,更新Group/User/Peer信息,并转发给Group/User--->
                     1)Group接收,遍历Peer,发送给Peer对应的在线User
                     2)User接收,长连接监听,写消息并close event.(客户端在连接关闭后将再次请求长连接)
 
3.同账号多次/多处登录限制方法:UserLoginEvent中带B类主机ID,
       1)该用户在别的主机已登录:主机检测本机用户--断线处理。
       2)本主机重复登录:检查已登录User,把之前登录用户断线。
 
 
4.Tomcat6配置:
       server.xml,修改为NIO Connector:
       <Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol" ...URIEncoding="UTF-8"/>
       URIEncoding为URI设置编码(对GET方式生效),POST方式情况增加EncodeFileter。
 
5.客户端请求:采用Ajax请求,避免页面刷新。
;