欢迎光临!
若无相欠,怎会相见

翻译 – Build Your Own Redis with C/C++ – 02

02. Sockets 简介

本章是 socket 编程的介绍。 假定读者具备基本的计算机网络知识, 但没有网络编程经验。 本书并不包含如何使用 Socket API 的所有细节, 建议你在学习本书的同时阅读手册和其他网络编程指南。https://beej.us/ 是一个 Socket API 的良好资源。

Redis 就是服务器/客户端系统的一个例子。 多个客户端连接到一个服务器, 服务器接收来自 TCP 连接的请求并发送响应。 在开始套接字编程之前, 我们需要学习几个 Linux 系统调用。

socket() 系统函数会返回一个 fd。 如果你不熟悉 Unix 系统, 下面是对 “fd” 的粗略解释:fd 是一个整数, 指的是 Linux 内核中的某个内容, 如 TCP 连接、 磁盘文件、 监听端口或其他资源等。

bind()listen() 系统函数: bind() 将地址与 socket fd 相关联, 而 listen() 则使我们能够接受对该地址的连接。

accept() 接收一个监听的 fd, 当客户端与监听地址建立连接时, accept() 返回一个代表连接 socket 的 fd。 下面是解释服务器典型工作流程的伪代码:

fd = socket() 
bind(fd, address) 
listen(fd)
while True:
    conn_fd = accept(fd) 
    do_something_with(conn_fd)
    close(conn_fd)

read() 系统函数从 TCP 连接中接收数据。 write() 系统函数发送数据。 close() 系统函数会销毁 fd 调用的资源, 并回收 fd 编号。

我们已经介绍了服务器端网络编程所需的系统函数。 在客户端, connect() 系统函数接收套接字 fd 和地址,  并与该地址建立 TCP 连接。 以下是客户端的伪代码:

fd = socket() 
connect(fd, address) 
do_something_with(fd) 
close(fd)

下一章将帮助你开始使用真实代码。

结语

接着上一篇文章继续

如有错误, 敬请指出, 感谢指正! — 2024-10-09  23:58:10

赞(0) 打赏
转载请注明:飘零博客 » 翻译 – Build Your Own Redis with C/C++ – 02
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎光临