在线客服技术方案

在线客服需求:
涉及人员:客服人员,普通客户
客服人员:有固定的工号登录,用户可以选择客服人员。每各客服人员可以设置最大聊天人数。客服人员不在线时,不能聊天。
普通客户:匿名登录。普通客户之间不能聊天,可以选择客服人员。
聊天可以由客服人员发起,或者普通客户发起。
在线客服只支持聊天信息的发送。不支持注册,状态,注册等功能。

在线客服的技术主要有以下几种方案(只是目前我了解的):
1 socket技术
主要用于flash和applet等浏览器插件。
2 comet技术
包含基于ajax的long polling技术和server push技术
ajax long polling:最常用的web im技术:浏览器使用ajax进行服务请求,保持tcp连接,直到连接超时,断开之后马上重连,也就是客户端始终保持一个连接。
优点:不需要安装插件,开发简单,可以满足在线客服的需求。
缺点:保持长连接,占用连接资源和线程资源。需要限定连接人数,并使用新的线程池,不能使用默认的线程池。
server push技术:
实际是异步servlet技术,当有事件时,直接push到客户端。
优点:可以释放线程资源,减少资源的使用。
缺点:只有tomcat和jetty支持,weblogic8不支持,同时也需要保持长连接。
3 streaming技术
主要用于直播技术,不涉及到客户端交互的情形。一般同步隐藏iframe技术实现,保持tcp连接,server持续push信息。ie不支持。
4 chat server技术
目前比较流行的是基于xmpp的im技术。有开源的server和类似qq的客户端,xep-0124也支持bosh技术,相关的开源软件是jwchat+jhb。
优点:有成熟的开源服务器和客户端,协议开源,可以支持并发度较高的情况,可以支持复杂的操作要求,如状态同步,注册,聊天,改名,群发,聊天室等各种操作。
缺点:不太符合在线客服的业务需求,如果使用,则需要修改服务器和客户端,有一定的难度。
5 定时刷屏技术,以前的技术。

方案选择:基于ajax的Long polling技术。
具体技术方案要点:
1 使用ajax保持长连结 超时重连,服务端响应后重连
伪代码:
while(true)
{
try{
connectToServer(); //blocking
}catch(e)
{

}
}
利用InnerHTML进行聊天信息的append。
客户发起聊天:点击聊天按钮,选择客服人员。 聊天通知:使用polling技术,通知客服人员。
客服发起聊天:存在活动的客服人员,自动弹出聊天窗口。
终止聊天:长时间无响应,退出网站。任何一方关闭聊天窗口。
2 服务端
聊天session: 一次聊天过程成为一个session,不同于jsp中的session.使用sessionid来表示session,聊天双方的窗口关闭,session就过期。每一个session一个response队列。也就是一次聊天对应两个队列。
处理过程:客户和客服人员都直接和weblogic交互,相互之间无直接连接。发送之后,转发到影响的session的队列。从接收队列获取数据,返回到客户端,断开连接,重新连接。
【在线客服技术方案】由于需要保持thread和connection,需要限制并发聊天数目,同时配置单独的线程池。

    推荐阅读