2025-05-06 IM技术架构(1) 外围基建-长连网关 简介IM系统可以简单理解为聊天系统,用户感知到的QQ聊天,电商客服,AI客服都是典型的im。 这类产品的用户体验是:实时性收发消息。在很多大厂,这类业务可能由很多不同部门共同配合才能做到。例如长连网关可能是“统一接入组”负责的,im业务则可能是社交工程组负责的。 本文聚焦最上面的长连网关。
2023-10-09 知识分享-线程, 协程以及网络模型 本文目的聚焦线程, 协程, 有栈协程, 无栈协程, reactor, 网络框架, netpoll, 阻塞等名词, 了解比较主流的网络编程逻辑。 背景多核时代, 使用多线程能加速运算。然而网络/磁盘io的阻塞会白白浪费时间, 浪费线程资源。但是线程资源是宝贵的, 开多了浪费性能(切换会耗费很多时间), 开少了无法利用多核的优势, 因此有多少核开多少个线程是主流认知。
2023-05-28 使用unix socket进行本机进程间通讯 前言最近在研究docker, 实际上docker是一个c/s架构的服务。用户通过docker命令与通过网络连接到dockerd服务然后发送请求, 这样就能操作容器。一般来说, 除了root, 还有docker用户组的用户有权操作容器。这种权限管理是怎么做的呢? 本文来探究这个问题。
2023-05-28 压缩解压链接文件和特殊设备文件 前言最近扒了下docker里rootfs的压缩包, 发现里面除了普通文件, 目录以外还有软链接(Symbolic Link)以及硬链接(Hard Link)。此外, 在go的tar库里面, 我还发现了linux设备的文件类型, 比如fifo(命名管道)和char(字符设备文件)。本文来谈谈如何压缩和解压这些奇怪的文件类型。
2023-05-07 使用mmap写framebuffer实现写屏, bmp图片格式概述, freetype2渲染文字 unix中读写文件的基本函数在谈论mmap前, 先来回顾下linux如何使用系统调用读写文件。在c语言中如果要读写文件, 我们第一时间想到的就是open打开某个文件, 然后通过read/write对文件描述符读写。看下面的代码演示:
2023-04-29 科学上网的多种实现方法(法1-tun全局代理) 前言好久没写东西了, 最近研究了各种vpn的实现方法。这次我打算写一个系列, 谈点常用的科学上网技术。这个系列主要讨论两种科学上网的实现方法: 即tun和socks5。 quic协议的出现让http代理日渐式微, 因此就不研究它了😁。
2023-04-04 c++ function, any的实现 any的简要用法:muduo::TcpConnection类中有一个boost::any成员, 每个连接都可以有属于自己的”上下文”。muduo的”文件传输”的例子中用到了这个特性, 看下面代码利用到了这个特性: