架构师训练营 - 第八周 - 学习总结
关于经典阻塞 I/O 中一个端口多个 Socket 的理解
在经典的阻塞 I/O 设计中
每个应用即 server 占用一个端口,每次连接进来创建一个 socket,这个 socket 绑定一个线程,该进程阻塞,直至 socket 中有数据后被唤醒。
这里的 socket 表示一次 tcp 连接,由源地址,源端口,目标地址,目标端口构成作为唯一标记(同一个客户端通过变更源端口来区分,代码如下),等服务器端网卡获取新的数据后,操作系统按照该标记找到对应 socket,将拆解后的 tcp 层数据写入该 socket 的缓冲区并唤醒等待线程。
通过模拟两次 http 请求(curl http://127.0.0.1:8081),查看输出的 Socket
复制代码
输出:
Socket[addr=/127.0.0.1,port=62337,localport=8081]
Socket[addr=/127.0.0.1,port=62344,localport=8081]
评论 (1 条评论)