当前位置: 首页 > news >正文

用J2ee怎么做视频网站代理注册公司是不是要户口本

用J2ee怎么做视频网站,代理注册公司是不是要户口本,简述站点推广有哪些方式,广东汕头澄海手工外发加工网文章目录 1. 处理服务器写入管道出错2. 引入线程池缓解大量请求导致服务器崩溃设计线程任务类单例线程池组件设计 3.代码位置4. 在线计算机业务运行截图 1. 处理服务器写入管道出错 经过测试#xff0c;服务器在读取报文时如果出错可以选择直接关闭这个TCP里链接来节省资源。… 文章目录 1. 处理服务器写入管道出错2. 引入线程池缓解大量请求导致服务器崩溃设计线程任务类单例线程池组件设计 3.代码位置4. 在线计算机业务运行截图 1. 处理服务器写入管道出错 经过测试服务器在读取报文时如果出错可以选择直接关闭这个TCP里链接来节省资源。这个问题好解决不在赘述 此外如果服务器使用CGI时向管道写入数据失败时服务器进程会收到sigpipe信号直接崩溃。所以这里选择直接忽视这个信号。 class HttpSever { private:int port;TcpSever *tcp_sever;bool states; // 标记服务器运行状态void InitSever(){// 信号SIGPIPE需要进行忽略防止服务器写入管道时失败服务器崩溃signal(SIGPIPE, SIG_IGN);tcp_sever TcpSever::GetInstance(port);}public:HttpSever(int _port PORT){port _port;tcp_sever nullptr;states true;InitSever();}~HttpSever() {}void Loop(){LOG(INFO, ---http sever loop begin---);int listen_socket tcp_sever-GetLinstenSocket();while (states ! false){struct sockaddr_in client; // 客户端信息socklen_t len sizeof(client);int sock accept(listen_socket, (struct sockaddr *)client, len);if (sock 0){// 套接字监听失败continue;}LOG(INFO, get a new link);int *_sock new int(sock);pthread_t tid 0;pthread_create(tid, nullptr, Entrance::HanderReq, _sock);pthread_detach(tid); // 线程分离}} };2. 引入线程池缓解大量请求导致服务器崩溃 设计线程任务类 #pragma once#include iostream #include ../Protocol.hpp// 设计线程任务队列 class Task { private:int sock;CallBack callback; // 设置回调 public:Task() {}Task(int _sock){sock _sock;}void ProcessOn(){callback(sock);} };服务器在收到链接时不创建线程而是构建线程任务然后将线程任务放入到线程任务队列上最后线程池从任务队列上拿去任务处理即可线程拿到任务后通过任务里的CallBack回调函数执行不同的任务 线程任务CallBack设计紧贴前面重构前的代码将Entrance类更改成CallBack即可这里设计仿函数线程回调函数通过()直接访问解析请求函数 // 线程工作入口 class CallBack { public:void operator()(int sock)//仿函数{HanderReq(sock);}// 处理HTTP请求static void HanderReq(int _sock){LOG(INFO, http request hander begin);EndPoint *endpoint new EndPoint(_sock);endpoint-ReadRequest();if (endpoint-Stop() ! true){LOG(INFO, recv success! build request begin);endpoint-BuildResponse();endpoint-SendResponse();}else{LOG(WARNING, recv error! please try again);}delete endpoint;LOG(INFO, http request hander end);} };单例线程池组件设计 ThreadPool #pragma once #include iostream #include task.hpp #include queue #include pthread.h #include ../log/log.hpp #define THREAD_NUM 6 // 单例模式 class ThreadPool { private:// 生产者消费者模型std::queueTask task_queue; // 临界资源int thread_count; // 线程数bool stop; // 线程池是否停止pthread_mutex_t mutex;pthread_cond_t cond;static ThreadPool *instance;bool init_threadPool() // 初始化线程池{for (int i 0; i thread_count; i){pthread_t thread_id;if (0 ! pthread_create(thread_id, NULL, thread_routine, this)){// 创建线程失败LOG(FATAL, init threadpool error!);return false;}}LOG(INFO, http sever init threadpool success);return true;}static void *thread_routine(void *args) // 线程执行函数 static 删除类的this指针,对象通过线程的参数传递{ThreadPool *pool (ThreadPool *)args;while (!pool-stop){Task task;pthread_mutex_lock(pool-mutex);while (pool-task_queue.empty()) // while 不能换成if{pool-thread_wait(); // 线程唤醒后一定占有互斥锁}task pool-task_queue.front();pool-task_queue.pop();pthread_mutex_unlock(pool-mutex);task.ProcessOn();}return NULL;}void thread_wait() // 任务队列无任务线程休眠{pthread_cond_wait(cond, mutex);}void thread_wakeup() // 任务队列有任务线程唤醒{pthread_cond_signal(cond); // 唤醒一个线程即可}ThreadPool(int thread_num THREAD_NUM){thread_count thread_num;stop false;pthread_mutex_init(mutex, nullptr);pthread_cond_init(cond, nullptr);init_threadPool();}ThreadPool(const ThreadPool ) delete;public:static ThreadPool *GetInstance(){static pthread_mutex_t lock PTHREAD_MUTEX_INITIALIZER; // 静态锁直接初始化不需要释放if (instance nullptr){pthread_mutex_lock(lock);if (instance nullptr){instance new ThreadPool();}pthread_mutex_unlock(lock);}return instance;}~ThreadPool(){pthread_mutex_destroy(mutex);pthread_cond_destroy(cond);}void push_task(const Task task){pthread_mutex_lock(mutex);task_queue.push(task);pthread_mutex_unlock(mutex);thread_wakeup();}bool is_stop(){return stop;} };ThreadPool *ThreadPool::instance nullptr;HttpSever函数更换为线程池同时组件化 #pragma once #include ./TcpSever/TcpSever.hpp #include Protocol.hpp #include ./log/log.hpp #include signal.h #include pthread.h #include ./ThreadPool/task.hpp #include ./ThreadPool/threadpool.hpp #define PORT 8080class HttpSever { private:int port;TcpSever *tcp_sever;bool states; // 标记服务器运行状态ThreadPool threadpool;void InitSever(){// 信号SIGPIPE需要进行忽略防止服务器写入管道时失败服务器崩溃signal(SIGPIPE, SIG_IGN);tcp_sever TcpSever::GetInstance(port);}public:HttpSever(int _port PORT){port _port;tcp_sever nullptr;states true;InitSever();}~HttpSever() {}void Loop(){LOG(INFO, ---http sever loop begin---);int listen_socket tcp_sever-GetLinstenSocket();while (states ! false){struct sockaddr_in client; // 客户端信息socklen_t len sizeof(client);int sock accept(listen_socket, (struct sockaddr *)client, len);if (sock 0){// 套接字监听失败continue;}LOG(INFO, get a new link);// 构建任务Task task(sock);threadpool.push_task(task);}} };测试运行结果如下线程池创建6个线程初始化线程池正确。同时用户报文发送错误日志级别WARING级别 3.代码位置 Github Gitee 4. 在线计算机业务运行截图 除0错误等其他错误会导致子进程错误退出服务器捕捉到后跳转到错误页面即404.html
http://www.pierceye.com/news/770362/

相关文章:

  • 公司网站后台管理网络公司名字大全三字
  • 广西住房建设厅网站广州seo工作
  • 做分销商城网站的wordpress 知更鸟 网格
  • 推销商务网站的途径有哪些爱网站查询挖掘工具
  • 苏州现代建设公司网站备案的域名做电影网站
  • 长沙seo网站优化公司wordpress5.1下载
  • 七星彩网投网站建设鹤壁公司做网站
  • 多语言企业网站建设费用怎么自己做购物网站
  • 中国网站排名前100线上网站开发相关书籍
  • 网站制作图书网站建设指南
  • 网站备案简单吗优化关键词排名软件
  • 泉山网站开发安徽建设工程造价信息网
  • 如何使用电子商务网站做seo需要用到什么软件
  • 新乡商城网站建设哪家专业潮汕学院网站开发
  • 西安响应式网站开发网站空间多少钱一年
  • 做电子相册的大网站怎样提高网站的权重
  • seo网站设计外包去哪个网站有客户找做标书的
  • 微商招商网站源码互联网营销推广方案
  • 深圳做网站服务公司河北石家庄最新新闻
  • 山东济南seo整站优化唐山网站建设那家性价比高
  • c 可以做哪些网站小说网站建设采集
  • 公司网站备案条件高校网站集群平台子站开发
  • 制作网站能赚钱吗单位发购物或电影卡有哪些app
  • 我们网站在那里登陆后台系统管理网站建设服务咨询
  • 免费上传图片的网址网站seo工作内容
  • chatgpt 网站一对一直播软件开发
  • 网站做排行多少费用个人电脑做网站打不开数据库
  • 做网站是比特币的滁州做网站电话号码
  • php网站开发说明怎么样建网站卖东西
  • 网站图片做多大浙江建设人才网