千家信息网

go和javascript怎么构建一个即时消息应用

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇"go和javascript怎么构建一个即时消息应用"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我
千家信息网最后更新 2026年11月04日go和javascript怎么构建一个即时消息应用

这篇"go和javascript怎么构建一个即时消息应用"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"go和javascript怎么构建一个即时消息应用"文章吧。

我们将会用 CockroachDB 作为 SQL 数据库,用 Go 作为后端语言,并且用 JavaScript 来制作 web 应用。

CREATE TABLE users (    id SERIAL NOT NULL PRIMARY KEY,    username STRING NOT NULL UNIQUE,    avatar_url STRING,    github_id INT NOT NULL UNIQUE);

显然,这个应用需要一些用户。我们这里采用社交登录的形式。由于我选用了 GitHub,所以这里需要保存一个对 GitHub 用户 ID 的引用。

CREATE TABLE conversations (    id SERIAL NOT NULL PRIMARY KEY,    last_message_id INT,    INDEX (last_message_id DESC));

每个对话都会引用最近一条消息。每当我们输入一条新消息时,我们都会更新这个字段。我会在后面添加外键约束。

… 你可能会想,我们可以先对对话进行分组,然后再通过这样的方式获取最近一条消息。但这样做会使查询变得更加复杂。

CREATE TABLE participants (    user_id INT NOT NULL REFERENCES users ON DELETE CASCADE,    conversation_id INT NOT NULL REFERENCES conversations ON DELETE CASCADE,    messages_read_at TIMESTAMPTZ NOT NULL DEFAULT now(),    PRIMARY KEY (user_id, conversation_id));

尽管之前我提到过对话只会在两个用户之间进行,但我们还是采用了允许向对话中添加多个参与者的设计。因此,在对话和用户之间有一个参与者表。

为了知道用户是否有未读消息,我们在消息表中添加了"读取时间"(messages_read_at)字段。每当用户在对话中读取消息时,我们都会更新它的值,这样一来,我们就可以将它与对话中末尾一条消息的"创建时间"(created_at)字段进行比较。

CREATE TABLE messages (    id SERIAL NOT NULL PRIMARY KEY,    content STRING NOT NULL,    user_id INT NOT NULL REFERENCES users ON DELETE CASCADE,    conversation_id INT NOT NULL REFERENCES conversations ON DELETE CASCADE,    created_at TIMESTAMPTZ NOT NULL DEFAULT now(),    INDEX(created_at DESC));

尽管我们将消息表放在末尾,但它在应用中相当重要。我们用它来保存对创建它的用户以及它所出现的对话的引用。而且还可以根据"创建时间"(created_at)来创建索引以完成对消息的排序。

ALTER TABLE conversationsADD CONSTRAINT fk_last_message_id_ref_messagesFOREIGN KEY (last_message_id) REFERENCES messages ON DELETE SET NULL;

我在前面已经提到过这个外键约束了,不是吗:D

有这四张表就足够了。你也可以将这些查询保存到一个文件中,并将其通过管道传送到 Cockroach CLI。

首先,我们需要启动一个新节点:

cockroach start --insecure --host 127.0.0.1

然后创建数据库和这些表:

cockroach sql --insecure -e "CREATE DATABASE messenger"cat schema.sql | cockroach sql --insecure -d messenger

以上就是关于"go和javascript怎么构建一个即时消息应用"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

消息 对话 用户 应用 内容 字段 时间 之间 参与者 数据 数据库 文章 末尾 知识 篇文章 更新 查询 复杂 重要 这样一来 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 精品咖啡豆 北京路客互联网科技有限公司 互联网下的科技发展 北京互联网科技有限公司 善班互联网科技 奇酷互联网络科技 睿民互联网科技 重庆科技学院互联网 成都仁贤领冠互联网科技有限公司 恒生科技互联网指数分析 互联网公司会议桌创意科技软装饰 团飞科技与伯堂互联网服务平台 阿里互联网科技公司 互联网还是高科技吗 南博望互联网科技有限公司 卓翼科技产业互联网合作 保险科技服务互联网营销体系 黑科技 体验场景 互联网大会 中国新注册互联网科技 北京天晋互联网科技有限公司 互联网科技开发公司 互联网医疗科技 恒银科技与互联网金融 武汉健翔互联网络科技有限公司 速维有品互联网信息科技(苏州)有限公司 特约风豹互联网科技为什么扣费 美国互联网科技实力 卡尔迅互联网科技有限公司 银川新华互联网科技学校原画 互联网科技的前景
0