CppComet是一个开源的Comet服务器,采用AGPL许可证。它使用C++编写,并利用MySQL存储数据。通过CppComet,可以从服务器(例如PHP代码)通过WebSockets发送消息,并在JavaScript中接收它们。这比一开始看起来要简单。在本文中,将创建一个简单的PHP和CppComet聊天系统。
在线聊天演示:
JavaScript API文档:
CppComet的GitHub仓库:
聊天示例的GitHub仓库:
CometQL文档:
JavaScript API文档:
推荐在Ubuntu、Debian或CentOS上安装。将使用Ubuntu。
apt-get update
apt-get install cmake make cpp gcc libssl-dev g++ nginx libmysqlclient-dev mysql-server mysql-client flex mailutils uuid-dev
克隆CppComet服务器的GitHub仓库:
git clone https://github.com/Levhav/comet-server
进入仓库目录:
cd comet-server
使用CMake构建:
cmake .
编译:
make
CppComet使用MySQL数据库存储用户凭据以进行服务器授权,并存储用户在线时间以及未送达消息等临时数据。
根据db.sql文件在MySQL中创建数据库。在comet.conf文件中设置数据库访问详情。
在控制台模式下运行:
./cpp_comet
以守护进程模式运行:
systemctl start comet.service
添加到启动:
cp ./comet.service /etc/systemd/system
systemctl daemon-reload
systemctl enable comet.service
成功运行服务器后,可以开始创建聊天。如果在这一步遇到错误,请在GitHub仓库中创建issue。
典型的聊天方案:
通过WebSockets连接到Comet服务器
发送Ajax消息以添加新消息到聊天
将消息添加到数据库
发送消息到CppComet
CppComet将消息发送给所有订阅者
CppComet提供了云SaaS替代方案,可用于测试和演示访问。在以下示例中,将使用https://comet-server.com的演示访问,供那些无法或懒得在他们的VPS上部署服务器的人使用。
登录:15
密码:lPXBFPqNg3f661JcegBY0N0dPXqUBdHXqj2cHf04PZgLHxT6z55e20ozojvMRvB8
主机:app.comet-server.ru
从JavaScript API连接到Comet服务器,请使用此命令:
cometApi.start({node: "app.comet-server.ru", dev_id: 15})
参数node - 设置自己的服务器主机名
参数dev_id - 仅当使用SaaS服务comet-server.com时使用
向PHP后端发送Ajax查询:
function sendMessage(name, text) { $.ajax({ url: "http://comet-server.org/doc/CppComet/chat-example/chat.php", type: "POST", data: "text=" + encodeURIComponent(text) + "&name=" + encodeURIComponent(name) }); }
CometQL - 它是通过MySQL协议与Comet服务器工作的API。(更多关于CometQL的信息)。
CometQL的优势:
统一的API,支持超过12种编程语言
简单易懂的查询视图
PHP包含资源,用于维护与MySQL的持久连接,现在,可以使用它与Comet服务器协作。
通过MySQL协议连接到Comet服务器:
$host = "app.comet-server.ru"; $user = "15"; $password = "lPXBFPqNg3f661JcegBY0N0dPXqUBdHXqj2cHf04PZgLHxT6z55e20ozojvMRvB8"; $comet = mysqli_connect($host, $user, $password, "CometQL_v1"); if(mysqli_errno($comet)) { echo "Error:".mysqli_error($link); }
向Comet服务器发送CometQL查询,以便向其他用户发送消息:
$msg = Array("name" => $_POST["name"], "text" => $_POST["text"]); $msg = json_encode($msg); $msg = mysqli_real_escape_string($comet, $msg); $query = "INSERT INTO pipes_messages (name, event, message) VALUES('simplechat', 'newMessage', '" . $msg . "')"; mysqli_query($comet, $query); if(mysqli_errno($comet)) { echo "Error:".mysqli_error($comet); } else { echo "ok"; }
订阅Comet服务器上的管道。此回调将在有人向简单聊天频道发送消息时调用,事件名为newMessage。
cometApi.subscription("simplechat.newMessage", function(event){ $("#web_chat").append('' + HtmlEncode(event.data.name) + ''); $("#web_chat").append('' + HtmlEncode(event.data.text) + ''); $("#web_chat").append(''); });
接收数据的过滤代码:
function HtmlEncode(s) { var el = document.createElement("div"); el.innerText = el.textContent = s; s = el.innerHTML; return s; }
在本文中,介绍了如何使用CppComet创建一个简单的聊天系统。希望这很有趣。
CppComet项目有许多功能,本文中没有使用。它们是:
在Comet服务器上授权
获取用户在线时间
从JavaScript API实时跟踪用户状态
从JavaScript API发送消息
通过他的ID向用户发送私人消息