IM技术架构(1) 外围基建-长连网关

简介

IM系统可以简单理解为聊天系统,用户感知到的QQ聊天,电商客服,AI客服都是典型的im。

这类产品的用户体验是:实时性收发消息。在很多大厂,这类业务可能由很多不同部门共同配合才能做到。例如长连网关可能是“统一接入组”负责的,im业务则可能是社交工程组负责的。

im系统上下游

本文聚焦最上面的长连网关。

Paseto密钥

传统JWT

不同于session, 无状态token不被存储进数据库, 服务端只能验证它是否是由自己签发。一个传统jwt是这样的:

知识分享-线程, 协程以及网络模型

本文目的

聚焦线程, 协程, 有栈协程, 无栈协程, reactor, 网络框架, netpoll, 阻塞等名词, 了解比较主流的网络编程逻辑。

背景

多核时代, 使用多线程能加速运算。然而网络/磁盘io的阻塞会白白浪费时间, 浪费线程资源。但是线程资源是宝贵的, 开多了浪费性能(切换会耗费很多时间), 开少了无法利用多核的优势, 因此有多少核开多少个线程是主流认知。

2023启动!

糟心的话

昨天微信的大四学长和我们谈了谈如今的就业形势, 简而言之就是非常不妙。强如大佬有三段腾讯实习经历都顶不住去年的就业惨况, 现在是时候卷起来了😭。

使用unix socket进行本机进程间通讯

前言

最近在研究docker, 实际上docker是一个c/s架构的服务。用户通过docker命令与通过网络连接到dockerd服务然后发送请求, 这样就能操作容器。一般来说, 除了root, 还有docker用户组的用户有权操作容器。这种权限管理是怎么做的呢? 本文来探究这个问题。

压缩解压链接文件和特殊设备文件

前言

最近扒了下docker里rootfs的压缩包, 发现里面除了普通文件, 目录以外还有软链接(Symbolic Link)以及硬链接(Hard Link)。此外, 在go的tar库里面, 我还发现了linux设备的文件类型, 比如fifo(命名管道)和char(字符设备文件)。本文来谈谈如何压缩和解压这些奇怪的文件类型。

c++ function, any的实现

any的简要用法:

muduo::TcpConnection类中有一个boost::any成员, 每个连接都可以有属于自己的”上下文”。muduo的”文件传输”的例子中用到了这个特性, 看下面代码利用到了这个特性: