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。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源
Redis创始人开源最小聊天服务器,仅200行代码,几天功夫已获2.8K Star!的更多相关文章
- openfire:基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件 上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfir ...
- 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
原文:http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html 随笔-150 评论- ...
- 200行代码实现Mini ASP.NET Core
前言 在学习ASP.NET Core源码过程中,偶然看见蒋金楠老师的ASP.NET Core框架揭秘,不到200行代码实现了ASP.NET Core Mini框架,针对框架本质进行了讲解,受益匪浅,本 ...
- 200行代码,7个对象——让你了解ASP.NET Core框架的本质
原文:200行代码,7个对象--让你了解ASP.NET Core框架的本质 2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为<ASP.NET Core框架揭秘&g ...
- SpringBoot,用200行代码完成一个一二级分布式缓存
缓存系统的用来代替直接访问数据库,用来提升系统性能,减小数据库复杂.早期缓存跟系统在一个虚拟机里,这样内存访问,速度最快. 后来应用系统水平扩展,缓存作为一个独立系统存在,如redis,但是每次从缓存 ...
- 200 行代码实现基于 Paxos 的 KV 存储
前言 写完[paxos 的直观解释]之后,网友都说疗效甚好,但是也会对这篇教程中一些环节提出疑问(有疑问说明真的看懂了 ),例如怎么把只能确定一个值的 paxos 应用到实际场景中. 既然 Talk ...
- 200行代码实现简版react🔥
200行代码实现简版react
- 不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN)【转】
本文转载自:https://www.leiphone.com/news/201703/Y5vnDSV9uIJIQzQm.html 生成对抗网络(Generative Adversarial Netwo ...
- 200行代码,7个对象——让你了解ASP.NET Core框架的本质
2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为<ASP.NET Core框架揭秘>的分享.在此次分享中,我按照ASP.NET Core自身的运行原理和设计 ...
- JavaScript开发区块链只需200行代码
用JavaScript开发实现一个简单区块链.通过这一开发过程,你将理解区块链技术是什么:区块链就是一个分布式数据库,存储结构是一个不断增长的链表,链表中包含着许多有序的记录. 然而,在通常情况下,当 ...
随机推荐
- python添加水印
# coding:utf-8 from PIL import Image, ImageDraw, ImageFont def add_text_to_image(image, text): font ...
- k8s+containerd安装
准备环境 准备两台服务器节点,如果需要安装虚拟机,可以参考<wmware和centos安装过程> 机器名 IP 角色 CPU 内存 centos01 192.168.109.130 mas ...
- mysql-workbench-community报错解决办法
输入以下命令: sudo apt-get -f install 参考链接:https://www.jianshu.com/p/767c9a29b403
- spring-mvc系列:详解@RequestMapping注解(value、method、params、header等)
目录 一.@RequestMapping注解的功能 二.@RequestMapping注解的位置 三.@RequestMapping注解的value属性 四.@RequestMapping注解的met ...
- [jmeter]快速入门
前言 以压测一个api为例.假设有一个非常简单的api http://192.168.1.111:8080/,只是返回 helloworld 字符串. 准备 打开 jmeter,新建测试计划 在测试计 ...
- 【python】调用钉钉机器人发起通知
有时候需要做个某些服务的状态监控,用钉钉机器人发通知挺方便的.可以用shell脚本配合crontab检测状态,检测到异常就调用python脚本发起告警. python内容 此处用的python3,需要 ...
- 带你快速上手HetuEngine
本文分享自华为云社区<[手把手带你玩转HetuEngine](一)HetuEngine快速上手>,作者:HetuEngine九级代言. HetuEngine是什么 HetuEngine是华 ...
- springboot项目自动关闭进程重启脚本
话不多说,先上脚本 kill -15 $(netstat -nlp | grep :9095 | awk '{print $7}' | awk -F"/" '{ print $1 ...
- 4399 Flash游戏专用浏览器, 无需安装Flash插件
目前所有的主流浏览器都已经不再支持Flash了,即使有一些国内浏览器还支持flash,但只能安装国内特供版Flash Player. 但问题的关键在于,这个国内特供版跟 Adobe 海外发行的版本是两 ...
- vue2原理初探-数据代理和数据劫持
本篇文章主要想简单聊聊vue如何实现数据修改,页面联动的底层原理. 当然,篇幅有限,只是自己一些浅显的认知而已,我会从一下几个方面去聊,希望对你有所帮助. 几个基础知识点 数据代理 数据劫持 完整de ...