关于幻冰小站web客服实现逻辑及特点
幻冰小站 浏览次数:784 2020-06-05 09:33:30

关于幻冰小站web客服

实现逻辑

    主要思路:后端判定客户端是否打开,在客户端打开时创建一条唯一标识(client_token)并记录下上线时间(create_time),打开之后每隔时间刻度(timelen)更新该用户在线的时间(update_time),当客户端断开与服务器的链接之后,(update_time)会停止更新,此时获取该记录(client_token)的(update_time)与(create_time),用(update_time)-(create_time)即为客户在线的时间长度

    时间刻度(timelen):应根据服务器配置不同而进行不同的设置,一般设置为(1s)即可

  重点难点:如何使客户端断开就停止更新(update_time)为本示例的实现难点,本次使用相当于让客户端一直在下载资源的方式保证客户端与服务器的链接,试想一下,客户端在下载一个资源,如果此时客户端与服务器的链接断掉,该资源是否会依旧处于下载中呢,答案是不会继续下载的,很明显,接下来我们重点就是如何模拟这个资源的下载,经百度等相关工具查找,了解到服务端(以php为例)将内容输出到客户端(以(webClient)浏览器为例)会经历以下流程,我们 echo 输出的buffer-》转入php专有的bufer(sapi/cgi/....)-》然后通过宿主程序(IIS/Apache/....)-》转入到客户端(webBuffer/.....)然后在客户端渲染得到。如果我们需要直接模拟一个定时输出到客户端的数据流时,需要使用以上步奏。

常规难点:

    问:  php有connect_status(),可以直接用于本示例的输出吗?

    答:否    从理论上讲客户端断开之后服务器应该马上断掉(shutdown)这段执行代码,其实服务端执行代码是依托于内存,当需要自行一段代码时,此时,服务程序会将执行代码放入内存中,当执行完成或者(shutdown)掉之后才会进行内存释放。

    问:如何让在IIS上的php的buffer直接转到客户端

    答:相当于越过IISbuffer,在IIS的配置该站点的文件里面,找到IIS配置PHP的节点,在节点上增加如下属性[responseBufferLimit="0"]即可

以下为该模块部分展示效果图:

效果图

"0.png"/

效果图

"1.png"/

效果图"2.png"/

效果图"3.png"/