多进程socket模型

每有一个客户端接入,服务端就生成一个进程对客户端提供服务,当客户端很多时,会消耗大量系统资源。

from socket import *
import time 

import os

import sys

 

def client_deal(client,client_info):

    while True:

        msg = client.recv(1024)

        if msg == ‘‘:

            client.close()

            break

 

        print ‘recv=‘,msg, ‘from:‘,client_info

        client.send(‘echo‘+msg)

        if msg ==‘q‘ or msg == ‘Q‘:

                        client.close()

                        break

 

def client_process(client,client_info):

    pid = os.fork()

    if pid == 0:

        ppid = os.fork()

        if ppid == 0:

            client_deal(client,client_info)

        else:

            print ‘pid=‘,os.getpid()

            sys.exit()

            print "child exit"

    else:

        client.close()

        os.wait()

        print ‘Main process wait child exit‘

 

if __name__ == ‘__main__‘:

    tcp_server = socket(AF_INET,SOCK_STREAM)

    tcp_server.bind((‘localhost‘,5001))

    tcp_server.listen(5)

    while True:

        print ‘pid=‘,os.getpid(),"wait client"

        client,client_info = tcp_server.accept()

        print client_info

        client_process(client,client_info)

    tcp_server.close()

时间: 2024-12-05 06:11:30

多进程socket模型的相关文章

php socket 模型及效率问题

// 创建套接字 socket_create(); // 绑定 socket_bind(); // 监听 socket_listen(); // 主体, 死循环 while(true){ // select模型, 取出可读套接字列表 socket_select(); foreach(sockets) { // 如果是监听连接请求端口的套接字 if(is listensocket) { // 接受请求 socket_accept(); } else { // 读取封包 socket­_recv()

手把手教你玩转SOCKET模型之重叠I/O篇(上)

“身为一个初学者,时常能体味到初学者入门的艰辛,所以总是想抽空作点什么来尽我所能的帮助那些需要帮助的人.我也希望大家能把自己的所学和他人一起分享,不要去鄙视别人索取时的贪婪,因为最应该被鄙视的是不肯付出时的吝啬.” ----- 题记  By PiggyXP(小猪) 前   言   其实我首先应该道歉,因为7月份的时候曾信誓旦旦的说要写一套关于SOCKET所有模型的入门文章以及配套代码,不过没想到后天竟然被美女所迷出去度假了,刚刚回来不久......-_-b其实那些模型的配套代码我已经基本写完了,

高性能Socket模型

1. 常见的Socket模型 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK.注意这里所说的NIO并非Java的NIO(New IO)库. (3)IO多路复用(IO Multiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的Select

手把手教你玩转SOCKET模型之重叠I/O篇(下)

四.     实现重叠模型的步骤 作 了这么多的准备工作,费了这么多的笔墨,我们终于可以开始着手编码了.其实慢慢的你就会明白,要想透析重叠结构的内部原理也许是要费点功夫,但是只是学会 如何来使用它,却是真的不难,唯一需要理清思路的地方就是和大量的客户端交互的情况下,我们得到事件通知以后,如何得知是哪一个重叠操作完成了,继而知道 究竟该对哪一个套接字进行处理,应该去哪个缓冲区中的取得数据,everything will be OK^_^. 下面我们配合代码,来一步步的讲解如何亲手完成一个重叠模型.

Socket模型详解(转)

Socket模型详解(转) Socket模型详解 两种I/O模式 一.选择模型 二.异步选择 三.事件选择 四.重叠I/O模型 五.完成端口模型 五种I/O模型的比较 两种I/O模式 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权.这种模式使用起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误

python_day9 多进程socket

基于多进程 server 端 同时处理多个socket客户端 from multiprocessing import Processfrom socket import *import timeserver=socket(AF_INET,SOCK_STREAM)server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)server.bind(('127.0.0.1',80))server.listen(5)def sock_server(conn,addr): wh

多线程socket模型

每有一个客户端接入,服务端就生成一个进程对客户端提供服务,当客户端很多时,和多进程一样会消耗大量系统资源. from socket import * import time import os import sys import threading   def client_deal(client,client_info): while True: msg = client.recv(1024) if msg == '': client.close() break print 'recv=',m

c++ 网络编程(二)TCP/IP linux 下多进程socket通信 多个客户端与单个服务端交互代码实现回声服务器

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9612820.html LINUX下: 一.服务端代码 下面用了多个close来关闭文件描述符,可能有的小伙伴会有疑惑....我就说一句,创建进程的时候会把父进程的资源都复制 一份,而你这个子进程只需要保留自己需要处理的资源,其他的自然要关闭掉, 不然父亲一个儿子一个 待会打起来怎么办  嘿嘿 注意了:就像进程间的通信需要属于操作系统的资源管道来进行,套接字也属于操作系统,所以创建新进程也还是

socket模型

服务器程序,简单的说就是接收网络数据,处理后并返回结果数据.网络模块是其必不可少的部分,它本质上就是处理socket的五类事件:accept(客户端接入),connect(连接上服务器),read,write和error.socket接口有两种工作模式,一种是阻塞模式,一种是非阻塞模式.阻塞模式通常不会用,因为它有两个弊端:一是会阻塞线程,要想处理多个连接就必须要一个连接一个线程,这样线程开销大且复杂度高;二是read时,如果对端链路异常了,协议栈无法正常得到关闭通知,那么就永远阻塞住了.非阻塞