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怎么构建一个即时消息应用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。


网站栏目:go和javascript怎么构建一个即时消息应用
文章链接:http://myzitong.com/article/jocjsg.html