当前位置:编程学习 > C#/ASP.NET >>

关于在线客服的聊天过程问题

看了些资料,准备用ajax定时取数据库的内容,但是想到点问题,
1:客服人员都有会话数限制,比如每个人最多和5个guest聊天,这个如何实现
2:假设guest1和客服2要聊天,那guest1发出去的信息,都直接记录在数据库中,记录的是guest1发给客服2,客服2定时取得数据,但它如何知道guest1发来的新的信息呢(在数据库里搞个字段,发送的时候设成0,查询到是发给你的数据,同时是0的状态,就抽出来表示,然后设定成1??) --------------------编程问答-------------------- 你这样的做法是轮询(polling),是个很纯粹的定时请求ajax取实时数据,但是如果间隔太小 ,客户端发出太多的请求,这些请求中会有一些是不会返回任何结果的,这样会浪费掉带宽和处理资源。

建议你去看下
Comet:基于 HTTP 长连接的“服务器推”技术
--------------------编程问答-------------------- HTML5 的 WebSocket 也是可以的  不过支持的浏览器太少了  手机上的几乎还没有支持的  貌似android的最新版本还要下载火狐浏览器插件才可以 
你还是学习下Comet吧  反向Ajax技术   --------------------编程问答-------------------- 还真没研究这种问题,不错,学习 --------------------编程问答-------------------- Comet技术 就是每个客户端另起一个ajax保持和服务器的长连接 这样可以想发送消息的时候可以达到推这个效果 不过由于是长连接  推完之后所有的客户端必须还要再次连接一下服务器 保持长连接
假如客户端有1000多个  那很有可能会引起服务器端的并发处理  IIS的并发工作线程数是有限的  这样会导致等待最后服务器停止响应。。。
解决方案你可以参考下 一个国外专家写的
Scalable COMET Combined with ASP.NET
利用线程池很有效的控制了工作线程不足的问题  速度还是很快的 --------------------编程问答--------------------
引用 4 楼 chopper7278 的回复:
Comet技术 就是每个客户端另起一个ajax保持和服务器的长连接 这样可以想发送消息的时候可以达到推这个效果 不过由于是长连接  推完之后所有的客户端必须还要再次连接一下服务器 保持长连接
假如客户端有1000多个  那很有可能会引起服务器端的并发处理  IIS的并发工作线程数是有限的  这样会导致等待最后服务器停止响应。。。
解决方案你可以参考下 一个国外专家写的
Scalable C……


没那么简单,如何对于不同的用户推送不同的数据,如何点对点等等好多问题,有待实现。这篇文章类似于服务端一对多的“广播方式”。
我以前翻译过这篇文章:
http://blog.csdn.net/yanghua_kobe/article/category/878755 --------------------编程问答--------------------
引用 5 楼 yanghua_kobe 的回复:
没那么简单,如何对于不同的用户推送不同的数据,如何点对点等等好多问题,有待实现。这篇文章类似于服务端一对多的“广播方式”。
我以前翻译过这篇文章:
http://blog.csdn.net/yanghua_kobe/article/category/878755

哇 翻译者是你哈  看到我给你留的言了没  非常感谢你翻译哈 --------------------编程问答-------------------- 的确那篇文章最后代码显示是一对多的像广播模式  
点对点的问题  我还没有做过  不过还是可以实现小组形式的发布
A组广播 B组广播  两者不会有影响  
--------------------编程问答-------------------- 对不同用户推送不同数据  我的做法就是在每个追加的CometWaitRequest对象里添加个属性  相当于标签那样的 利用标签来达到分组  也就是最后要push的时候 就是遍历CometWaitRequest数组的时候  根据标签来push  这样就可以达到了  我目前就是这么做的   --------------------编程问答-------------------- 其实对于动不动就把网络系统理解为“一方往关系数据库里边insert数据,另一方到关系数据库select数据”的人所提的问题,你给他通讯方面的回答,他可能没有任何感觉。

这类系统最起码地,数据原本根本是“不落地”的。也就是首先各种数据跟数据库没有直接关系,就算存数据库也是从备份和另外进行异步统计的角度。

扔掉数据库概念,而从实际的架构触发,你才会设计真正社会化的实用的网络软件。 --------------------编程问答-------------------- 以前在说道系统任务处理机制时,一个北大的软件公司“技术总监”一上来就问我,上千活跃用户的电信级IM系统,“数据库有多大?是怎么优化查询语句的?”,弄得我完全懵了。我回答他说:“这个首先我们并没有考虑数据库,数据库文件每月也就最少增长20G就够了”,他则是完全懵了。

对方是做OA那一类程序的,从来没有从这类服务的角度去设计。做OA软件的架构师,关心的就是如何优化sql语句的问题,那就是他所说的“架构”,而不是通讯相关的架构。 --------------------编程问答-------------------- 上千活跃用户的  -->  上千万活跃用户的 --------------------编程问答-------------------- sp1234我也知道只有的设计不合理,不过脑子不好使,不太会啊,你有什么资料介绍看看
长轮训的问题,我也知道,但很多资料都说不能同时开2个,如果是这样,那我一个客服如何对多个人聊天呢?这个我没想明白 --------------------编程问答-------------------- 看了些资料,准备用ajax定时取数据库的内容,但是想到点问题,
1:客服人员都有会话数限制,比如每个人最多和5个guest聊天,这个如何实现
2:假设guest1和客服2要聊天,那guest1发出去的信息,都直接记录在数据库中,记录的是guest1发给客服2,客服2定时取得数据,但它如何知道guest1发来的新的信息呢(在数据库里搞个字段,发送的时候设成0,查询到是发给你的数据,同时是0的状态,就抽出来表示,然后设定成1??) 
-------------------------------------------
APPLICATION对象实现聊天室 这个你可以去参考下,这个就是实现的一对多,把信息保存到服务器上。离线的就直接保存到数据库。这个东西需要大量的使用到JS脚本比如:模拟一对一窗口等。至于你说的存储到数据库这个也是个办法,但是中间就多了一道手续而且如果数据量大了还是挺纠结的,这个建议可以用于离线信息。 --------------------编程问答-------------------- http://

        
--------------------编程问答--------------------

            
莫有接触过。。淡定的学习
--------------------编程问答--------------------
引用 12 楼 supersunyi 的回复:
sp1234我也知道只有的设计不合理,不过脑子不好使,不太会啊,你有什么资料介绍看看
长轮训的问题,我也知道,但很多资料都说不能同时开2个,如果是这样,那我一个客服如何对多个人聊天呢?这个我没想明白

你根本用不到数据库在内存里放个队列或别的什么ds也行list也行,来了数据放进去,有个轮询了发给他,然后删除掉,过期数据也删除,要求服务器端备份的就入库或写文件,库和文件根本不做查询操作。这个数据区几万人也用不掉几百k的内存。就这么简单,这就是不落地,你根本不用关心数据持久化的问题,因为这是聊天。 --------------------编程问答-------------------- 关于长连接那种东西能够节省带宽和网络资源的说法才是个笑话,首先comet并不是真的不断开,由于浏览器过期限定的问题,长轮询也要定时重连,一般是大约20秒,此外一个长轮询就要占用服务器商的一个真实tcp/ip连接,而iis的连接数也是一种资源。比轮询没什么优势。此外由于防止客户端死翘翘,还要在长轮询中发心跳数据,来表明连接活着否则自动断开,这和轮询比是一般无二的。唯一的优势大约就是用户响应时间上更快捷,但你感觉一个回复晚0.5或0.25秒到达,在web应用的用户体验上真的是无法忍受的么,所以用AJAX轮询就足够了。 --------------------编程问答-------------------- 你的客户还是客服都是一对一,都是对服务器,这就是b/s聊天和c/s聊天的不同了。 --------------------编程问答-------------------- --------------------编程问答-------------------- http://topic.csdn.net/u/20101112/10/f2471824-dce3-4cd1-b8be-2b48aff19594.html一个很老的小例子功能不大,你自己要改进 --------------------编程问答-------------------- --------------------编程问答-------------------- 呵呵,螃蟹说的有点道理
--------------------编程问答-------------------- 除
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,