0.如何学习DiTing
前言哈喽,大家好,我是DanMu。看到这篇文章说明这个项目或多或少的对你提供了帮助,在这里感谢你的肯定,欢迎大家加入【谛听/DiTing】,一起见证【谛听/DiTing】的迭代和成长😁。
DiTing是什么这是一个简单、轻量级的即时通讯(IM)开源项目,采用 Go 编写,严格遵守互联网开发标准。致力于为初学者提供一个友好、易于上手的 IM 解决方案。提供包括群聊,单聊,群组管理及好友关系管理等功能。
为什么推荐学习DiTing
初学者友好: DiTing提供了详尽的代码注释和丰富的文档,致力于让第一次接触开源项目的初学者也能快速理解,迅速掌握其中的关键技术,无需痛苦于模糊的业务逻辑和细节。
技术栈丰富: DiTing作为一个单体项目,采用Gin作为Web开发框架,同时涵盖了MySQL、Redis、分布式锁、消息队列和WebSocket等一系列热门技术,一站式集成,规避了现有开源项目技术栈不足的问题,让你在学习过程中能够全面接触到多个领域的知识,丰富你的技术储备。
社区活跃:我们拥有一个充满活力的社区,这里汇聚了众多热爱技术的开发者。你可以在这里与同行交流心得,分享 ...
2.DiTing聊天室-用户登录和注册
前言Hello,我是单木。接下来我将会开启一个新的博客系列,使用 GoLang 从 0 到 1 实现一个IM聊天室项目。在上一篇文章中,我们已经实现了一个简单的聊天室 Demo ,接下来我们就要开始具体业务的实现部分。在这篇文章中,我们将会完成用户的登录和注册。
技术选型 HTTP 作为一个无状态的协议,是无法区别这个请求的发起者是谁的。为了能够区分不同的客户端,我们需要给每一个客户端设计一个标识,然后让客户端在请求的时候携带对应的标识,来达到区分不同用户的目标。同时,对于每一个客户端,我们可能还需要维护与它相关的一些信息,比如用户名,状态等信息。在这个基础上衍生出了许多技术,现在比较主流的技术主要是三种:cookies、session 以及 JWT
Cookiescookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。cookie 是不可跨域的, 每个 cookie 都会绑定单一的域名,无法在别的域名下获取使用,一级域名和二级域名之间是允许共享使用的(靠的是 domain)。优点:
结构简单。cookie 是一 ...
1.DiTing聊天室-实现一个最简单的Demo
前言Hello,我是单木。接下来我将会开启一个新的博客系列,使用 GoLang 从 0 到 1 实现一个IM聊天室项目。在上一篇文章中,我们已经成功的搭建好了项目的整体框架,废话少说,接下来让我们正式开始聊天室的开发。在这篇文章中,我们将要完成聊天室最基本的需求:让一个用户发送的内容能够被其他用户接收。
需求分析接手到一个需求,我们都应该首先进行一个简单的调研,看看有哪些方式可以实现我们的目的。
技术选型让我们从最常用的 HTTP 请求开始,作为一个实时聊天室项目,第一个要求就是我们的用户发出的信息必须能够立刻到达接收方,很不幸,常见的 HTTP 通常以请求-响应为一次整体,必须要求客户端先向服务器发起请求,服务端才能将消息包装在响应中返回,对于发送方,服务器可以把信息包装在发送消息的响应中,但是对于接受方来说,服务器缺少直接推送消息的方式。要解决这个问题也很简单,只需要让接收方不断的请求服务器即可,如果有消息,就将消息使用响应返回。这个方式被称为短轮询。但是,这样存在一个显然的问题,通常来说,包含有消息的响应的比例将会是非常小的,有大量的 CPU 资源都被无效的空响应消耗了。并且随 ...
0.DiTing聊天室-准备工作
前言Hello,我是单木。接下来我将会开启一个新的博客系列,使用 GoLang 从 0 到 1 实现一个IM聊天室项目。
为什么要做这个项目说实话,作为一个Javer,我对于 Go 的了解也还仅限于前两天时间刚刚突击的基本语法,但是没办法,我即将实习的公司采用 Go 作为技术栈,我只能开始转战 Go 的旅程。作为一个 Go 语言的新手,我肯定会遇到各种各样的问题和挑战。正因为如此,我希望通过记录我的学习过程和解决问题的方法,能够帮助其他新手更好地理解和应对在学习 Go 语言过程中可能遇到的困难。我希望,通过分享我的经验和教训,我能够为那些正在踏上学习 Go 语言之路的人们提供一些有价值的帮助和指导。废话少说,让我们进入正题。
项目构建创建一个空白项目如果下载安装 Go 和创建一个项目网上已经有许多非常优秀的教程了,这里请允许我偷个懒,如果有需要,这里提供两个连接,请大家自行阅读Go 安装和GoLand 的安装和使用接下来我们创建一个全新的项目,这里就叫做DiTing-Go好了,那么现在一个空白的 Go 项目就搭建好了。
项目的层级好了,现在我们先不考虑具体的实现细节,我们先来对项目的功 ...