构建C1000k服务器

.修改最大打开文件数

1.修改系统总共最大打开文件数

在 /etc/sysctl.conf 文件末尾添加:

fs.file-max = 1020000
或者

永久修改,*表示所有用户,可以改成某个用户名

编辑 /etc/security/limits.conf 文件, 加入如下行:

# /etc/security/limits.conf
*         hard    nofile      1020000
*         soft    nofile      1020000

2.修改当前用户单个进程可以打开的最大文件数

sudo sh -c "ulimit -n 1020000 && exec su $LOGNAME"

二。测试代码

但是服务器端没有用多个ip来测试,而是用多个端口来测试,默认从8000端口开始,开30个端口,因为单个客户端可用端口为65535减去3万多

服务器端程序依赖libev框架,需要提前编译,然后存放到相应位置。下面t有具体服务器端代码 

编译

gcc server.c -o server ../include/libev.a -lm

运行

./server -p 8000

在源码中默认指定了8000端口,可以通过-p进行指定新的端口。 开启了8000端口进行监听请求,http协议处理类似于htmlfile chunked块编码传输。



server.c
#include <arpa/inet.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <err.h>

#include <unistd.h>

#include "libev-4.20/include/ev.h"

#define HTMLFILE_RESPONSE_HEADER \
    "HTTP/1.1 200 OK\r\n" \
    "Connection: keep-alive\r\n" \
    "Content-Type: text/html; charset=utf-8\r\n" \
    "Transfer-Encoding: chunked\r\n" \
    "\r\n"
#define HTMLFILE_RESPONSE_FIRST \
    "<html><head><title>htmlfile chunked example</title><script>var _ = function (msg) { document.getElementById('div').innerHTML = msg; };</script></head><body><div id=\"div\"></div>                                                                                                                                                                                                                                                                                                                                         "

#define PORT_NUM 30

static int server_port = 8000;

struct ev_loop *loop;
typedef struct {
    int fd;
    ev_io ev_read;
} client_t;

ev_io ev_accept[PORT_NUM];

static int usr_num;
static void incr_usr_num() {
    usr_nu
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值