专栏首页飞天小牛肉Echo 的发送私信是怎么做的

Echo 的发送私信是怎么做的

这篇教程新鲜的东西不多,私信发送和帖子发布的做法如出一辙,都是使用 Ajax 异步实现,参见这篇文章:Echo 的发帖操作是怎么做的

直接看前端 js 代码 letter.js,异步的发送私信请求具体是如何发送出去的:

通过 id 选择器获取 recipient-name(收信人的 username) 和 message-text(具体私信内容) 的值,将这两个值作为参数传递给 /letter/send 接口。

我们再来看看那个后端接口是啥,下述这段代码在 MessageController 中:

发送私信的本质是啥,就是一个在 letter 数据库表中插入一行记录罢了,详细可见 addMessage 方法,非常简单,这里不再贴图出来了。

另外,这里有两个需要注意的点:

1)第一个需要注意的就是,conversation_id 的赋值,上篇文章我们介绍过,对于这个字段,我们约定,id 小的在前,id 大的在后。

2)第二个需要注意的就是,插入数据库的私信记录默认状态是未读(status = 0)的,那么,当对方(收信人)获取私信列表的时候,也就是扫描数据库,就可以获取到这条状态是未读的私信,从而修改相应的未读消息数量。

可能有些小伙伴会有疑惑,既然这条私信状态在数据库的记录中是未读的,那对于这个发信人来说,把他发出去的私信算作未读的话,是不是不太符合大众的逻辑?

是的。所以我们查询未读私信数量的 SQL 语句是这样写的:

to_id = userId,也就是说,判断是否是未读私信的时候,只判断那些别人发给我的私信。而我发给别人的私信,压根就不会纳入未读私信的考虑范畴,尽管我发给别人的这条私信记录在数据库中的状态是 1(未读),但是那是对于别人(收信人)来说的。

本文分享自微信公众号 - 飞天小牛肉(CS-Wiki),作者:飞天小牛肉

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Echo 的私信列表与详情页是怎么做的

    需要注意的是:这张表不仅存储用户之间的私信,也存储系统通知,不同的是,系统通知的 from_id 特定为 1,而这个 id 为 1 的用户是我们手动内置进去的。

    飞天小牛肉
  • Echo 的发布评论是怎么做的

    这样,处理发布评论这个逻辑的 Service 层方法就需要执行两次 DML 操作,所谓 DML 就是数据操纵语言, 属于 SQL 语言四大分类(数据查询语言 D...

    飞天小牛肉
  • Echo 的发帖操作是怎么做的

    最常用最原始的,form 表单。通过 form 表单以 post/get 方式提交数据,当你点击 submit 按钮时,浏览器会把你在 input 里面输入的数...

    飞天小牛肉
  • Echo 的点赞模块是怎么做的

    需要特别注意的是,Redis key 命名需具有简洁性、可读性以及可管理性,根据阿里云的 Redis 开发规范,我们给 Redis key 起名的时候需要遵守这...

    飞天小牛肉
  • Echo 的关注模块是怎么做的

    关注的目标可以是用户、帖子等,在实现时将这些目标抽象为实体就行了,目前为止 Echo 中只实现了关注用户功能。

    飞天小牛肉
  • Echo 的注册功能是怎么做的

    另外,默认未激活的用户状态 status=0 也会存入数据库,当然,我们会为该注册用户随机生成一个唯一的激活码一并存入数据库:

    飞天小牛肉
  • Echo 的系统通知模块是怎么做的

    系统通知是一个很常见且必要的需求,当发生点赞、关注、评论操作的时候,系统就会给相应的用户发送通知。

    飞天小牛肉
  • Echo 的帖子列表与分页是怎么做的

    业务逻辑这个模块的文章后续应该都会改成一元钱的付费文章了,emmm,算是一点精神上的慰藉吧。毕竟这种类型的文章不像 Java 八股文那样铺天盖地都是现成的博客、...

    飞天小牛肉
  • Echo 的登录认证和授权是怎么做的

    首先,登录的时候会随机生成验证码,如何把这个验证码和当前用户对应起来,实现验证码的校验呢?

    飞天小牛肉
  • Deno TCP Echo Server 是怎么运行的

    在 “了不起的 Deno 入门教程” 这篇文章中,我们介绍了如何使用 Deno 搭建一个简单的 TCP echo server,本文将使用该示例来探究 TCP ...

    山月
  • Tensorflow的LRN是怎么做的

    LRN全称是local response normalization,局部响应归一化,想了解原理的点这个AlexNet(http://papers.nips.c...

    用户1332428
  • 注册、登录和 token 的安全之道

    最近想要做一个小项目,由于前后都是一个人,在登录和注册的接口上就被卡住了,因此想登录、注册、口令之间的关系,使用 PHP 实现登录注册模块,和访问口令。

    码农编程进阶笔记
  • 微信自动回复机器人是怎么做的 ?

    本文转载自读者的公号 Ahab杂货铺 。简单粗暴,分享一种有趣的玩法---微信自动回复机器人。

    小小詹同学
  • 你的隐私数据是怎么泄漏的

    上篇文章给京东洗了个地,说京东金融没有偷偷上传用户图片,但是不表示有没有通过其他路径上传用户信息。今天我们就说说,我们的个人隐私数据,是怎么被各大公司采集的。

    卤代烃
  • 我是怎么把研发安全做“没”了的

    我叫王大锤,万万没想到,我成了马栏山不省心集团的研发安全工程师……这一定是对我的终极考验,相信用不了多久我就会升职加薪,当上总经理,出任CEO,迎娶白富美,走向...

    FB客服
  • 我们是怎么做Code Review的

    前几天看了《Code Review 程序员的寄望与哀伤》,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享、探...

    李海彬
  • 开发知识 | 即时通讯是怎么做到的?

    即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传...

    APICloud官方
  • 亚马逊Alexa再次抽风,莫名其妙把私人对话发给同事

    两周前的一个晚上,俄勒冈波特兰一名女士Danielle接到她老公同事的电话,提醒他们赶紧关掉亚马逊音箱Echo。

    量子位
  • Hadoop总结篇之四---底层通信是怎么做到的

    上一篇介绍了一个job的提交过程。期间多次提到通信协议。那么协议是什么? 协议其实就是通信的双方所遵守的一套规范,这套规范规定了通信时传输的数据的固定的格式。 ...

    小端

扫码关注云+社区

领取腾讯云代金券