文章分类 - LINUX SOCKET编程系列
SOCKET(五)多路复用
摘要:上文我们采用了IO阻塞+多线程解决了服务器多并发问题,但是,为每一个用户服务都需要开启一个线程,开销仍然是巨大的,那么有没有一种方法,能使一个线程处理多个客户呢?这就需要用到我们的多路复用机制了。 多路复用机制实现一般有select、poll、epoll三种。 对于它们的原理可以概述为将客户端连接的
阅读全文
SOCKET(四)用户多并发:阻塞+线程
摘要:前面的服务端只能在同一时间内处理一个客户端请求,而另外发起连接的客户端则会阻塞在accept队列中,等待正在服务的客户端退出直到轮到自己。这种仅能一对一处理的服务器在效率上是绝不可允许的,因此我们需要使得服务器能同时实现对多个用户的服务处理。 本文介绍第一种方法:阻塞IO+多线程并发(进程开销过大,
阅读全文
SOCKET(三)阻塞式与非阻塞式
摘要:如果你运行过(一)中的范例,你会发现,客户端与服务端未建立连接前会在accpet与connect之间等待,建立后进行读写时,不论是客户端还是服务端都会在read()处等待另一方发送。本节让我们来了解以下他们的阻塞等待原理。 阻塞机制 connnect() 客户端通过connect()主动向服务端建立
阅读全文
SOCKET(二)关于轮子之间的交互
摘要:listen 与 connect 三次握手 上文我们聊到通过listen函数实现服务器的监听客户连接功能,下面让我们探究一下listen是如何与connect交互实现TCP三次握手的。 如图:当客户端启动connect时,会发送一个SYN包同时进入SYN_SENT状态,LISTEN接受到包后会返回一
阅读全文
SOCKET(一)基本轮子详解与入门
摘要:1.图解客户端与服务端交互流程 上图轮子详解 socket简单实践 服务端 #include <stdio.h> #include <string.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #in
阅读全文
浙公网安备 33010602011771号