Giter Site home page Giter Site logo

smallchat's Introduction

smallchat

A minimal programming example for a chat server in Go.

Redis作者 Salvatore Sanfilippo 最近创建一个新的演示项目:smallchat,用了200行代码实现了一个聊天室。这个项目的目的是展示如何用Go语言实现一个简单的聊天服务器。

他写这个项目的动机如下:

昨天我正在与几个前端开发者朋友闲聊,他们距离系统编程有些远。我们回忆起了过去的IRC时光。不可避免地,我说:编写一个非常简单的IRC服务器每个人都应该做一次。这样程序中有非常有趣的部分。一个进程进行多路复用,维护客户端状态,可以用不同的方式实现等等。

然后讨论继续,我想,我会给你们展示一个极简的C语言例子。但是你能编写出啥样的最小聊天服务器呢?要真正做到极简,我们不应该需要任何特殊的客户端,即使不是很完美,它应该可以用telnetnc(netcat)作为客户端连接。服务器的主要功能只是接收一些聊天信息并发送给所有其他客户端,这有时称为扇出操作。这还需要一个合适的readline()函数,然后是缓冲等等。我们想要更简单的:利用内核缓冲区,假装我们每次都从客户端收到一个完整的行(这个假设在实际中通常是正确的,所以这个假设没啥问题)。

好吧,有了这些技巧,我们可以用只有200行代码实现一个聊天室,用户甚至可以设置昵称(当然,不计空格和注释)。由于我将这个小程序作为示例编写给我的朋友,我决定也把它推到Github上。

嗯,很有意思,这让我想起我最早在学校了玩BBS的时光,看到大家写的BBS服务端和客户端就觉得很神奇。最近几年我也一直在做网络编程方面的工作,所以我想使用Go语言实现antirez的这个小项目,看看Go语言在网络编程方面的表现如何。

最后以不到100行的代码实现了一个聊天室。

除去注释,不到一百行:

smallchat's People

Contributors

smallnest avatar blight19 avatar crossoverjie avatar j178 avatar

Stargazers

 avatar mingyuan42 avatar  avatar keep moving avatar Grey avatar maiyang avatar Kallen Ding avatar  avatar 云销雨霁 avatar Jiacheng Dong avatar EnanZhou avatar Kang Wang avatar  avatar Junbo Zheng avatar Tumb1eweed avatar BuggyCoder avatar Qing avatar  avatar fjqz177 avatar songyun avatar Yuchen avatar lilili1987 avatar cocopanda avatar  avatar TristeFeder avatar xz avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar 鲜衣怒马 avatar  avatar  avatar  avatar InitCool avatar Mutalisk avatar 里丰 avatar  avatar Dazun avatar Alex avatar  avatar er0s10n avatar yingbo cheng avatar Jayson Cho avatar 不如跳舞hh avatar woodenrobot avatar  avatar  avatar ouliuquan avatar  avatar AFuture avatar  avatar 闫同学 avatar nonyotsugi avatar Amamiya Miu avatar Beck Xu avatar Fity Yang avatar  avatar Jack avatar  avatar  avatar listenwind avatar  avatar harryhare avatar tsingson avatar CheneyDev avatar tifancy avatar Stoney Kang avatar rxliuli avatar Doke avatar Zhoukun Cheng avatar Jason avatar mymickey avatar  avatar Des Guo avatar  avatar Lan Qingyong avatar Lorain avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.