构建基于CppComet的简易聊天系统

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将消息发送给所有订阅者

步骤1:从JavaScript API连接到Comet服务器

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时使用

步骤2.1 向服务器发送消息

向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) }); }

步骤2.2 向Comet服务器发送CometQL查询

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"; }

步骤3:从Comet服务器接收消息

订阅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向用户发送私人消息

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485