TCP并发服务器(五)——每个客户一个线程

TCP并发服务器(五)——每个客户一个线程

1.说明

前面4个版本都是关于进程的,可以将进程改为线程来实现。

这个最简单的版本也快于前面的所有预先派生进程的版本。

2.代码

#include "unpthread.h"

void sig_int(int signo)
{
    DPRINTF("sig_int()\n");
    void pr_cpu_time(void);
    pr_cpu_time();
    exit(0);
}

void *doit(void *arg)
{
    void web_child(int);
    DPRINTF("创建一个线程\n");
    Pthread_detach(pthread_self());

    //int connfd = (int)arg;
    web_child((int)arg);
    Close((int)arg);

    return NULL;
}

int main(int argc, char *argv[])
{
    socklen_t addrlen;
    int listenfd;
    if (argc == 2) {
        listenfd = Tcp_listen(NULL, argv[1], &addrlen);
    } else if (argc == 3) {
        listenfd = Tcp_listen(argv[1], argv[2], &addrlen);
    } else {
        err_sys("Usage: a.out [ <host> ] <port#>");
    }
    struct sockaddr *cliaddr = (struct sockaddr*)Malloc(addrlen);

    Signal(SIGINT, sig_int);

    pthread_t tid;
    for (;;) {
        socklen_t clilen = addrlen;
        DPRINTF("Wait for a connection\n");
        int connfd = Accept(listenfd, cliaddr, &clilen);
        DPRINTF("Accept a connection\n");

        Pthread_create(&tid, NULL, &doit, (void*)connfd);
    }

    return 0;
}

TCP并发服务器(五)——每个客户一个线程,布布扣,bubuko.com

时间: 2024-08-09 17:16:32

TCP并发服务器(五)——每个客户一个线程的相关文章

TCP并发服务器,每个客户一个子进程

在阅读完<unix 网络编程:卷一>之后,感觉作者真是unix下编程的大师级的人物.而对于我个人而言,每次阅读完一本技术书籍之后,一定还是得自己重新再写一遍程序(换点内容),复习书本中的内容(大致结构,或者说思想,相同),否则,你很难做到真的理解并掌握的地步. Okay,今天我带来的是服务器模型中的第一种,也是最基本最常用的一种模型–TCP并发服务器,每个客户一个子进程. 先简单介绍一下:TCP并发服务器,每个客户一个子进程,也就是说并发服务器调用fork派生一个子进程来处理每个子进程,使得服

TCP并发服务器(一)——每个客户一个子进程

TCP并发服务器(一)——每个客户一个子进程 1.说明 这是最传统的并发服务器,对于每一个客户请求fork一个子进程.问题在于每次fork一个子进程比较耗费时间,下面会讲预创建进程. 程序代码基于UNP的库. 程序在使用进程的模式下是最慢的. 2.代码 #include "unp.h" int main(int argc, char *argv[]) { int listenfd; socklen_t addrlen; if (argc = 2) { listenfd = Tcp_li

TCP并发server,每个客户一个子进程

今天笔者带来的是server型号第一,这是最经常使用的模型的最基本的一个–TCP并发server,每个客户一个子进程. 首先简单介绍:TCP并发server,每个客户一个子进程,并发server调用fork派生一个子进程来处理每一个子进程,使得server能够同一时候为多个客户服务,每一个进程一个客户. 客户数目的唯一限制是操作系统对以其名义执行server的用户ID能够同一时候拥有多少子进程的限制. 详细到我们的需求,我们的client发送某个指令,服务端接收.假设符合服务端的要求.就将当时的

Linux网络编程——tcp并发服务器(多线程)

tcp多线程并发服务器 多线程服务器是对多进程服务器的改进,由于多进程服务器在创建进程时要消耗较大的系统资源,所以用线程来取代进程,这样服务处理程序可以较快的创建.据统计,创建线程与创建进程要快 10100 倍,所以又把线程称为"轻量级"进程.线程与进程不同的是:一个进程内的所有线程共享相同的全局内存.全局变量等信息,这种机制又带来了同步问题. tcp多线程并发服务器框架: 我们在使用多线程并发服务器时,直接使用以上框架,我们仅仅修改client_fun()里面的内容. 代码示例: #

Linux网络编程——tcp并发服务器(多进程)

一.tcp并发服务器概述 一个好的服务器,一般都是并发服务器(同一时刻可以响应多个客户端的请求).并发服务器设计技术一般有:多进程服务器.多线程服务器.I/O复用服务器等. 二.多进程并发服务器 在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器.多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求.父进程继续等待其它客户的请求.这种方法的优点是当客户有请求时,服务器能及时处理客户,特别是在客户服务器交互系统中.对于一个 TCP 服务器,客户与服务器的连接可能并不

TCP并发服务器(四)&mdash;&mdash;预创建子进程,accept互斥锁

1.说明 Posix文件上锁可移植到所有Posix兼容系统,但是涉及到文件系统操作,可能比较费时. 本次使用线程上锁保护accept,这不仅适用于同一进程中各线程之间上锁,也适用于不同进程之间上锁. 2.进程间使用互斥锁要求 (1) 互斥锁变量必须存放在由所有进程共享的内存去. (2) 必须告知线程函数库这是在不同进程之间共享的互斥锁.要求线程支持PTHREAD_PROCESS_SHARED属性.默认属性PTHREAD_PROCESS_PRIVATE, 只允许在单个进程内使用.   3.代码 支

tcp并发服务器(c20w)

** 原创文章,请勿转载 ** 并发服务器是一个老生常谈的话题,今天这里也写一个. 1. 目标: 同时在线连接20万(c20w). 开发语言:重要的事情说三遍,GOLANG, GOLANG, GOLANG! 那为什么是20W,不是30W或其它? 这个数字随意.   :) 2. 环境: 虚拟机(xenserver),    虚出6台机器(OS: CentOS 6.6 64bit) : . 一台服务器8核CPU,2G内存 . 五台客户端2核CPU,2G内存 3.  改centos几个参数, 6台机器

Linux网络编程——tcp并发服务器(poll实现)

想详细彻底地了解poll或看懂下面的代码请参考<Linux网络编程--I/O复用之poll函数> 代码: #include <string.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/select.h> #include <sys/time.h> #include <sys/socket.h> #incl

UNIX网络编程2.9端口号2.10端口号与TCP并发服务器