0%

上一篇文章中,我们了解了如何通过 netty 实现一个echo server。你应该还记得 ServerBootstrap 启动类,它负责 server 的启动管理,在启动前我们需要为其配置 EventLoopGroupEventLoopGroup 有配套的 ServerSocketChannel,比如通常使用最多的是 NioEventLoopGroup,它就需要和 NioServerSocketChannel 搭配起来工作。

阅读全文 »

兴趣是最好的老师,当你对一件事情感兴趣的时候,你就更容易长久地坚持下去,从而达到一个更高的高度,或许还能够取得意想不到的效果。接下来我会从实现一个 echo server 开始 netty 的探索旅程,如果你也对 netty 感兴趣,那么我们就开始吧。

阅读全文 »

转眼又是新的一年,时间过得真是太快了,今天继续来聊聊网络 IO 模型的问题。网络 IO 模型是一个比较抽象的概念,你可以很容易地找到很多介绍网络 IO 模型的文章,也有很多介绍网络 IO 系统调用实现的文章。但是前者往往仅限于抽象的概念介绍,缺少关键的细节。后者则往往介绍过多的细节,让人难以把握住重点。本文将会对比 BIO 和 NIO 两种网络 IO 模型的原理和优缺点,然后通过 recvfrom 系统调用介绍两种 IO 模型在使用上的区别,让你不再被各种高级的类库封装所迷惑。为了防止太多细节干扰你的理解,我将仅挑选关键的代码进行介绍。此外,我会在文章末尾贴出完整的代码,以便你进行测试和验证。

阅读全文 »

有时需要在 linux 环境下测试一些程序,比如测试基于 epoll 或 io_uring 的程序,这对于使用 mac 的用户来说是个问题。一种方式是另外备一台 linux 电脑,然后通过 ssh 命令进行远程操作,但是这并不方便。另一种方式是在 virtual box虚拟机上安装一个 linux 系统,但是这个占用资源太多了,毕竟我只是想运行一下 linux 程序,不希望动辄占用几个G的内存空间和几十个G的硬盘空间。考虑到 docker 占用资源比较少,使用起来也比较方便,因此选择通过 docker 打造一个 linux 运行环境。

阅读全文 »

linux 下 locked-in-memory size 的默认大小通常是 64 K,这对于 io_uring 来说是不够用的。

io_uring accounts memory it needs under the rlimit memlocked option, which
can be quite low on some setups (64K). The default is usually enough for
most use cases, but bigger rings or things like registered buffers deplete
it quickly.

阅读全文 »

今天在解决一个问题时,需要测下某机器的指定端口是否能正常接收数据,忽然发现想不起来命令叫啥(就是nc),看来还是要做好记录。考虑到后续可能还会添加新的命令,还要方便查阅和分享,索性就记到这里吧。

阅读全文 »

对于程序员来说,这个时代是最好的时代。随着软硬件的快速发展,电脑变得越来越便宜,获取一台用于编程的电脑不再是大问题。更重要的是,当你拥有了电脑后,获取编程知识的途径相比以往也更加丰富,有各种在线课程手把手地带你一步一步学习,有各种专栏把总结好的知识教给你。当然这些都是被动地接受知识,要想真正地掌握还是离不开实践,而研究开源项目就是一种好的实践方式。

阅读全文 »