网络服务器常见设计

本文详细介绍了12种常见的网络服务器设计方案,包括单线程Reactor、线程池计算、多线程Reactor等,讨论了各方案的优缺点,如IO密集型应用的适用性、顺序性保证、资源管理等,提供了时序图辅助理解。
摘要由CSDN通过智能技术生成

最近工作之余阅读陈硕的《Linux多线程服务器端编程—使用C++网络库》,对整体流行的编写并发网络程序的方案有了系统的认识。现对该书中关于并发服务器程序设计方案作简要记录(见章节6.6.2 常见的并发网络服务程序设计方案)。

下表为该书作者总结的12种常见方案。“互通”指的是多个客户连接之间能否方便的交换数据(进程之间数据不方便交换,线程之间可以访问)。“顺序性”指的是对于同一个连接,发送多个请求,那么计算得到的多个响应是否按相同的顺序返回给客户端(先到先处理原则)。


方案0

iterative服务器,而非并发服务器,一次只能服务一个客户。这个方案不适合长连接,很适合daytime这种write-only短连接服务。
import socket

def handle(client_socket, client_address):
while True:
data = client_socket.recv(4096)
if data:
sent = client_socket.send(data) # sendall?
else:
print "disconnect", client_address
client_socket.close()
break

if __name__ == "__main__":
listen_address = ("0.0.0.0", 2007)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(listen_address)
server_socket.listen(5)

while True:
(client_socket, client_address) = server_socket.accept()
print "got connection from", client_address
handle(client_socket, client_address)

方案1

传统Unix并发网络编程方案,称之为process-per-connection。该方案适合并发连接数不大的情况。至今仍有一些网络服务器用这种方式&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值