随着移动互联网的普及,人们越来越需要在线通讯聊天工具来进行交流和沟通。在这个背景下,实现一个在线通讯聊天室成为了一个热门的话题。本文将介绍如何使用 Serverless 实现一个在线通讯聊天室,并提供详细的指导意义以及示例代码。
什么是 Serverless
Serverless 是一种全新的云计算架构体系,其重要特点就是把运维工作交给云服务商,让开发者专注于业务逻辑。Serverless 云计算架构体系的核心就是 FaaS(函数即服务),即将函数作为计算单位,由云服务提供商协调和管理运行。
在 Serverless 中,每个函数都是独立的,且只需要当函数被调用时,才会被加载并执行。这种架构能够极大地提高应用系统的可扩展性、弹性和可维护性。
实现在线通讯聊天室的基本思路
在线通讯聊天室的实现步骤如下:
第一步:准备一个 Web 页面,让用户可以通过该页面输入聊天内容并发送给其他用户。
第二步:通过 WebSocket 技术建立用户与服务器之间的通讯,并保存聊天记录。
第三步:在服务器端将用户发来的文本消息进行广播,即向所有在线用户广播该消息,并在 Web 页面上展示出来。
本文将通过 Serverless 免费提供的 WebSocket 服务实现在线通讯聊天室,利用 Serverless 的云函数来实现广播消息,将聊天记录保存在 DynamoDB 中。
使用 Serverless 免费提供的 WebSocket 服务
Serverless 提供了免费的 WebSocket 服务,借助该服务,我们可以非常方便地实现一个在线通讯聊天室。下面的代码是建立 WebSocket 连接的示例代码:
-- -------------------- ---- ------- ----- --- - ------------------- ----- ----------------------- - --- ----------------------------- ----------- ------------- --------- ----------------------------------------------------------- --- --------------- - ----- ------- -- - ----- ------------ - ---------------------------------- ----- ---- - ----------------------- --- - -- ------------- ----- ------------------------------------------ ------------- ------------- ----- -------------------- ------------- - ----- --- - -- ---------------- -- ------------- --- ---- - ------------------ ----- ----------- -------- ------------------ ------- - -- -------------- ----- -- - ------ --- --
以上代码通过在 AWS Lambda 中进行部署,可以建立我们自己的 WebSocket 通讯频道。
使用 DynamoDB 存储聊天记录
本文将使用 DynamoDB 存储聊天记录。首先,在 AWS Management Console 中创建一个 DynamoDB 表,并设置主键为 connectionId,这是 WebSocket 中使用的连接 ID。可以使用以下代码来进行连接 ID 的获取:
const connectionId = event.requestContext.connectionId;
在请求处理函数中写入以下代码即可保存聊天记录:
-- -------------------- ---- ------- ----- --------- - --------------- ----- ------ - --- ------------------------------ --------------- - ----- ------- -- - ----- ------------ - ---------------------------------- ----- ---- - ----------------------- -- - -------- ----- ---- -- ----- --------- - ---------------------- ----- ------------ ---------- ---------- ----- - ------------- ------------- ---------- ---------- -------- ------------ - ------------- --- --
广播信息
因为我们的聊天室需要实现广播,所以需要在 Lambda 函数中对所有的客户端发送消息。这需要我们能够枚举 connectionId,以便服务器可以逐一发送消息。为此,我们需要在 Event Gateway 中使用 WebSocket API 来收集连接 ID。当一个新的客户端连接时,Lambda 函数会被触发,我们可以将 connectionId 添加至 DynamoDB 中存储的连接 ID 列表中:
-- -------------------- ---- ------- ----- --------- - --------------------- ----- ------ - --- ------------------------------ --------------- - ----- ------- -- - ----- -------------------- - ------------------------------ --- ---------- ----- ----------------------- - ------------------------------ --- ------------- -- ---------------------- -- ------------------------- - ------ - ----------- --- -- - -- ---------------------- - ----- ------------ - ---------------------------------- -- - -------- ------- ----- --------- - ---------------------- ----- ------------ ---------- ---------- ----- - ------------- ------------- ---------- --------- - ------------- - ---- -- ------------------------- - ----- ------------ - ---------------------------------- -- - -------- ------- ----- --------------- ---------- ---------- ---- - ------------- ------------ - ------------- - ------ - ----------- --- -- --
最后,还要在 Lambda 函数中发送广播消息,并且向所有活跃的连接发送消息:
-- -------------------- ---- ------- ----- -------------------------- - --------------------- ----- -------------------- - --------------- ----- ------ - --- ------------------------------ ----- ----------------------- - --- ----------------------------- ----------- ------------- --------- ----------------------------------------------------------- --- --------------- - ----- ------- -- - ----- ------------ - ---------------------------------- ----- ---- - ----------------------- ----- --------- - ---------------------- ----- ------------ ---------- --------------------- ----- - ------------- ------------- ---------- ---------- -------- ------------ - ------------- -- ----------- -- ------- ----- ----------------- - ----- ------------- ---------- --------------------------- --------------------- -------------- ------------- ----- -------- - ---------------- -------- ----------------- ---------------- --- ----- --------------------------------------------- -- ------------ -- -- - --- - ----- ------------------------------------------ ------------- ------------- ----- -------- ------------- - ----- --- - -- ------------- --- ---- - ------------------ ----- ----------- -------- ------------------ - ---- - ----- -- - - ---- --
以上代码已经实现了在线通讯聊天室的核心功能。在 AWS Management Console 中选择 API Gateway 服务,在左侧栏中选择 “Routes”,然后点击 “Create Route” 按钮。在对话框中输入 “/default” 然后保存,然后新建一个 Lambda 函数并将其与 API Gateway 集成,这样你就可以在浏览器中访问你的 API Gateway URL,然后开始使用在线通讯聊天室了。
总结
Serverless 提供了一种高效、可扩展和经济实惠的部署方法,能够减少运维成本,使开发者能够集中精力编写业务逻辑。本文介绍了如何使用 Serverless 实现在线通讯聊天室,通过 WebSocket 技术、DynamoDB 存储聊天记录以及使用 Lambda 函数进行广播信息等实现方式,让开发者在遇到在线通讯聊天室的场景时,能够非常方便地实现自己的业务需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6472ce8f968c7c53b0061a7d