我将开发一个实时帮助聊天系统,其基本功能类似于http://www.providesupport.com和http://www.liveperson.com/
我不确定如何构建应用程序。我希望有一个基于Web的聊天脚本,供最终用户与我们的支持人员进行交互,他们将使用管理控制台来管理不同的聊天。我打算使用混合的PHP / JavaScript / AJAX来实现最终用户聊天和Java来构建管理面板。还有一个MySQL数据库来存储设置/聊天等。
我想要包含的主要功能包括: - 支持多个并发聊天 - 多个运营商 - 在运营商之间转移聊天 - “用户正在输入”通知 - 将每个聊天记录到数据库中 - 在线/离线模式
我已经为系统的基本架构提出了三种可能的方法,特别是聊天元素的工作方式。我不确定哪种方法最好,希望你能指出我正确的方向,并指出我错过的任何优点/缺点。
方法1 - 聊天的静态HTML文件
PHP用户聊天框写入和读取包含聊天的HTML文件。然后每隔几秒重新加载此文件以确保显示更新。 Java管理员端也会做类似的事情。
优点: - 始终记录消息。 - 操作员可以通过加载不同的HTML文件来管理不同的聊天 - 不同的运营商可以加载相同的聊天,允许用户转移
缺点 - 用户输入通知需要一些单独的方法
方法2 - 用于存储聊天记录的MySQL数据库
在键入每条新消息时,聊天将写入MySQL数据库。然后,管理员和用户端将每隔几秒检查一次数据库中的更新,并重新加载聊天窗口(如果已经发生)。
优点: - 每条消息都存储在DB中时,会记录消息。 - 操作员可以通过不同的SQL查询管理不同的聊天 - 不同的运营商可以加载相同的聊天,允许用户转移
缺点: - 用户输入通知需要一些单独的方法 - 数据库会变得非常大 - 不断查询数据库可能会导致服务器负载过高,并且使用大型表会变慢;
方法3 - 直接套接字连接
PHP Web端有一个直接与他们正在交谈的Java管理客户端的套接字连接。所有的聊天数据都经历了这一点,然后当聊天完成后,它将被写入数据库进行存储。
优点: - 当各方知道何时收到新消息时,会很快 - “用户正在键入”消息可以通过套接字连接发送 - 记录数据
缺点: - 套接字连接可能会丢失,从而结束聊天。 - 不确定如何在运营商之间进行聊天转移
摘要
那么,总结一下,哪种方法最好?我有没有想过更好的方法?我查看了HTML5网络套接字,但我需要良好的浏览器兼容性。
除此之外,我如何根据管理员用户是否登录来实现在线/离线指示?
我是一个更通用的概述而不是代码等?
感谢您的帮助。
答案 0 :(得分:0)
您是否考虑过socket.io才能获得真正的跨浏览器套接字?
否则你可以使用已经为此开发的东西,而不是重新发明轮子,就像已经存在的XMPP JS库一样。
如果你想自己实现一些东西,最好的方法是ajax长轮询,不要不断重新加载页面,而是提供某种web服务,并使用JS(或jQuery)与之通信,并传输只有与聊天相关的数据。