最近工作之余阅读陈硕的《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)