当前位置: 首页 > news >正文

Redis创始人开源最小聊天服务器,仅200行代码,几天功夫已获2.8K Star!

中午时候,在技术交流群里聊起关于Redis创始人的一些趣事,比如离开Redis之后,去写科幻小说之类的。

因为好奇科幻小说,TJ君就去搜索了一下。结果一搜,发现Redis作者最近居然又搞了个新活儿!

世界上最小的聊天服务器

这次Redis作者的新开源项目名叫:SmallChat。 从关于内容中可以知道,这个开源项目是要打造最小的聊天服务器。

从开源项目的内容中来看,确实如此,就下面这些:

代码部分除去大量注释之后,更是惊人的只有200+行代码,可以说真的是做到了极致的精简。

起源与未来

在该项目的README中,目前还没有更多关于该项目的使用说明,更多的是关于该项目的背景和未来展望。

内容也是非常值得大家细品,TJ君从中感受到一名优秀开发者的思维模式,是非常值得大家去学习的。我们也可以去多学习这种思维方式,来多创造一些更有意思的东西。

下面一起来看看他的故事:

昨天和几个朋友聊天,大部分都是前端开发人员,离系统编程有点远。我们正在回忆 IRC 的旧时光。我说道:编写一个非常简单的 IRC 服务器是每个人都应该做的经历(我向他们展示了我用 TCL 编写的实现;我很震惊我在 18 年前写了它:时间过得很快)。这样的程序中有一些非常有趣的部分。单个进程执行多路复用、获取客户端状态并在客户端拥有新数据后尝试快速访问此类状态,等等。

但后来讨论发生了变化,我想,我将向您展示一个用 C 编写的非常简单的示例。您可以编写的最小的聊天服务器是什么?为了真正做到最小化,我们不应该需要任何合适的客户。即使不是很好,它也应该与 telnet 或者 netcat 一起使用。服务器的主要操作只是接收一些聊天行并将其发送到所有其他客户端,有时称为扇出操作。然而,这需要适当的功能,然后是缓冲等等。我们希望它更简单:让我们使用内核缓冲区进行欺骗,并假装我们每次都从客户端收到完整的行(这个假设在实践中通常是正确的,所以事情还算有效)。

好吧,通过这些技巧,我们可以实现一个聊天,甚至能够让用户在短短 200 行代码中设置他们的昵称(当然,删除空格和注释)。因为我写了这个小程序作为给我的朋友们的例子,所以我决定也将它推送到 GitHub 上。

关于未来的工作:

在接下来的几天里,我将继续修改这个程序,以使其进化。不同的演变步骤将根据我的写作系统软件系列的 YouTube 剧集(涵盖此类变化)进行标记。这是我的计划(可能会改变,但或多或​​少这就是我想要涵盖的内容):

  • 实现读和写的缓冲
  • 避免使用线性数组,使用字典数据结构来保存客户端状态
  • 编写适当的客户端:能够处理异步事件的行编辑
  • 从 select(2) 切换到更高级的 API
  • 用于聊天的简单对称加密

怎么样?一个有趣的开源项目就这样诞生了。好了,今天的分享就到这里。最后,老规矩,奉上开源地址:https://github.com/antirez/smallchat , 感兴趣的可以去围观代码。

欢迎关注我的公众号:程序猿DD。前沿技术早知道,弯道超车有希望!积累超车资本,从关注DD开始!

http://www.lryc.cn/news/217701.html

相关文章:

  • RK-3399pro 萤火虫firefly 官方unbuntu 固件系统安装搜狗中文输入法
  • 2014年亚太杯APMCM数学建模大赛A题无人机创造安全环境求解全过程文档及程序
  • Java字符串常用函数 详解5000字 (刷题向 / 应用向)
  • 在RabbitMQ中 WorkQueue 工作队列 和发布(publish)/订阅(Subscribe) 有什么区别?
  • 关闭Dell xps 系列笔记本触控屏
  • 物理内存的组织形式
  • IOS渲染流程之提交图层数据至RenderThread进程
  • shell学习脚本05(小滴课堂)
  • 长短期神经网络LSTM的博文分类,长短期神经网络的原理分析
  • 虹科干货 | 手把手教你通过CODESYS V3进行PLC编程(一)
  • rabbitmq的confirm模式获取correlationData为null解决办法
  • 【Linux】centos7安装配置及Linux常用命令
  • LCD调试
  • 【计算机网络】金管局计算机岗位——计算机网络(⭐⭐⭐⭐)
  • 第十四章 ObjectScript 系统标志和限定符 (qspec) - 限定符与标识
  • 测试这碗饭,现在是越来越难吃了
  • 这个超实用的门禁技巧,让办公楼安全更简单高效!
  • C++虚表与虚表指针详解
  • 12 pinctrl 和 gpio 子系统
  • 【复盘】记录一次JVM 异常问题 java.lang.OutOfMemoryError: unable to create new native thread
  • Java基础之类型(内涵面试题)
  • idea好用插件整理
  • 【WinForm详细教程五】WinForm中的MenuStrip 、ContextMenuStrip 、ToolStrip、StatusStrip控件
  • 研究人员发现34个Windows驱动程序易受完全设备接管攻击
  • 最新 vie-vite框架下 jtopo安装使用
  • 基础课20——智能客服系统的使用维护
  • Aop自定义注解生成日志
  • 虚幻引擎:RPC:远端调用
  • 涉及多种位运算操作混合类题目——通过加转三进制(扩大状态,不变枚举量):CF1033F
  • BIOS开发笔记 - DDR基础