高并发服务器-多线程

为了流量券,冲

B站就业班视频

28_哔哩哔哩_bilibili

比较起来,还是多进程的服务器更好,用线程函数写的代码,有如下俩问题:

1.客户端刚关闭的时候,服务器压根不知道,要关了再连接的时候,服务器才反应过来。

我自己分析原因:对应 线程执行函数,读取服务器数据 n=read() 当n <=0 时,因为函数一直在这里阻塞,所以收不到n=0的信号(我的见解不知道对不对)

2.主线程应该关闭accept函数产生的文件描述符newfd,现在找不到写主线程代码的地方 - -

3.线程与线程之间,两种文件描述符(监听,处理信息)都是共享的,如果想让它们实现不同享,需要先构建一个结构体Allinfo,把客户端地址sockadd_in,文件描述符,线程号包起来,再利用数组的元素内存地址不同,把这个大结构体Allinfo的指针传到线程回调函数里 当参数 ,太麻烦了,后面没听讲

//多线程 的 高并发服务器。注意添加pthread.h头文件
#include 
#include 
#include 
#include 
#include 
#include
#include 
#include 
#include 
#include 

//先声明线程回调函数calbak
void * calbak (void *arg){
    int *fd2 =(int *) arg;
    //这个函数里面应该无法打印客户端地址了(ip和端口)因为这个局部变量不认识dst 
    //printf("child process,IP:%s,PORT: %d\n", inet_ntop(AF_INET, &dst.sin_addr.s_addr,addstring,sizeof(addstring)),ntohs(dst.sin_port));
    //其次,把客户端发送过来的数据读出来
    int i =0;
    int n =0;
    char buf[1024];
    while (1){
        memset(buf,0x00,sizeof(buf));
     	n = read (*fd2,buf,sizeof(buf));
       	if (n<=0){
             printf("有一个客户端已关闭,或者读到的字符为0/n");
	     break; 
        }
        for (i=0;i

你可能感兴趣的:(就业班视频学习,服务器,运维,c++)