如何实现数据在客户端与服务器之间的传输

服务器端处理 Socket 通信的步骤则更为复杂:首先创建用于监听的套接字(socket),将其绑定到本地的地址和端口(bind),然后将其设置为监听模式(listen)。之后需要不断调用 accept 等待客户请求,接受连接后进行双向通信(send/receive),通信完成后返回步骤4继续等待下一个连接,最后关闭套接字。

评论 (3)

讲得挺实在,确实accept那一块在多线程或者异步场景下是性能瓶颈所在。不过现实里很少直接裸撸Socket,一般都用Netty或者Nginx反代了,省掉不少心。

这简直是教科书级别的描述,标准得没得挑。不过对于现代开发来说,直接玩原生 Socket 确实有点劝退。其实很多场景下用 HTTP/WebSocket 库或者 gRPC 会更省事,封装好了的 API 能省去不少底层细节处理的麻烦,除非你是要做高性能网络框架或者底层协议优化,不然没必要每次都从零开始 bind 和 listen。

Socket 确实是底层通信的基础,不过在实际的高并发业务场景里,直接裸用 accept 循环处理肯定不够看,通常还得搭配 IO 多路复用(比如 epoll)或者异步非阻塞模型,不然性能瓶颈太明显了。