c++ socket 服务器 线程池 海量 并发 windoes linux 源代码 SPServer
来源:互联网 发布:c语言如何生成exe文件 编辑:程序博客网 时间:2024/06/07 19:13
一、SPServer: 一个基于线程池(包括HAHS和LF)的开源服务器框架
SPServer
SPServer
1.封装了
2.使用非阻塞型I/O和事件驱动模型,基于
3.对于
4.对于
5.一个
6.从
项目主页
[url=http://code.google.com/p/spserver/]http://code.google.com/p/spserver/
下载地址
[url=http://freshmeat.net/redir/spserver/68862/url_tgz/spserver-0.3.src.tar.gz]http://spserver.googlecode.com/files/spserver-0.6.src.tar.gz
[url=http://code.google.com/p/spserver/downloads/list]http://code.google.com/p/spserver/downloads/list
详细的介绍
[url=http://iunknown.javaeye.com/blog/59804]http://iunknown.javaeye.com/blog/59804
HSHA
[url=http://www.cs.wustl.edu/~schmidt/PDF/HS-HA.pdf]http://www.cs.wustl.edu/~schmidt/PDF/HS-HA.pdf
LF
[url=http://www.cs.wustl.edu/~schmidt/PDF/lf.pdf]http://www.cs.wustl.edu/~schmidt/PDF/lf.pdf
关于
[url=http://iunknown.javaeye.com/blog/60414]http://iunknown.javaeye.com/blog/60414
项目中包含一个线程池子项目
http://iunknown.javaeye.com/blog/38544
以上是从 http://www.chinaunix.net/jh/23/957813.html
二、http://www.pudn.com/downloads124/sourcecode/unix_linux/network/detail527666.html
这里有一个线程池+socket的服务器源代码,有兴趣的可以学习一下。
三、linux下最好的io模型是epoll,有点类似于windows下的完成端口,感觉select支持1000个左右就差不多了。要想支持10k以上的连接,需要考虑的问题有很多。
你可以看一下下面这个链接(C10k Problem)。
http://www.kegel.com/c10k.html
四、在网上无意看到一个多线程的Socket服务器端例子,觉得非常不错。特别是其中的线程池的思想,简单而且高效。虽然JDK1.5开始已经自带了线程池包,但该代码不失为学习Socket和多线程的一个好的入门例子。
下面的代码是对该例子的简单整理,补充了注释。
【代码一】PooledConnectionHandler:后台处理类
public
}
【代码二】PooledRemoteFileServer:多线程服务器端,负责创建线程池并等待客户端的连接请求
public
}
这个例子的精髓是在PooledConnectionHandler类,它首先创建一个公共的全局“线程池”(LinkList),然后启动线程监控线程池,与此同时服务器端在接收到客户端请求后将请求加到“线程池”中,这两个动作是异步的,在加的时候不允许读,在读得到时候不允许加(通过synchronized关键字控制),而且多个线程之间并不会互相影响,因为其中的connection属性是对象级的。
从这个例子中我们也可以学到在多线程的情况下,哪些变量是必须设置为全局的(static),哪些是必须设置为对象级的:即会被多个线程访问的资源必须设置为全局的,而跟线程处理状态,结果有关的属性一般必须设置为对象级的,以防止互相干扰。
其次就是在多线程情况下,哪些方法是可以设置为static的而不会出现线程安全的问题,哪些方法是不能设置为静态方法的:如果方法是属于控制流程,通知,派发的,那么一般可以设置为静态的。因为这些方法一般不需要多个,一个就够了。就如同控制器只要一个就够了。而业务逻辑实现方法一般不能设置为静态的,因为静态方法不能引用对象变量(非静态变量),但业务逻辑通常是需要针对不同的用户做出不同的处理的,所以几乎可以肯定的说是绝对会出现对象变量的。
五、
linux下多线程socket监听的c程序(例子)
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8888
void *yourfunction(void *connect_fd)
{
int connfd = *((int *)connect_fd);
} //在这里面直接对connfd调用read和write函数就可以和客户端收发数据了。
int main(void)
{
int sockfd, n, connfd;
pthread_t tid;
struct sockaddr_in servaddr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1)
{
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(PORT);
n = bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
if (n == -1)
{
}
n = listen(sockfd, 20);
if (n == -1)
{
}
while (1)
{
}
return 0;
}
- c++ socket 服务器 线程池 海量 并发 windoes linux 源代码 SPServer
- epoll+socket实现 socket并发 linux服务器 (c)
- Linux网络编程 - TCP Socket 简单练习:线程池实现并发服务器
- SPServer : 一个基于线程池(包括HAHS和LF)的高并发 server 框架
- SPServer : 一个基于线程池(包括HAHS和LF)的高并发 server 框架
- SPServer : 一个基于线程池(包括HAHS和LF)的高并发 server 框架
- SPServer : 一个基于线程池(包括HAHS和LF)的高并发
- epoll+socket实现并发服务器 Linux C(版本一)
- 【原创】TCP Socket 简单练习 --- 线程池实现并发服务器
- C 线程实现并发服务器
- Windoes的线程编程
- Linux Socket 多并发服务器开源代码:xSocketd 实现PPC/TPC/SELECT/POLL/EPOLL
- SPServer中线程池实现部分分析
- Linux + C + Epoll实现高并发服务器(线程池 + 数据库连接池)
- Linux + C + Epoll实现高并发服务器(线程池 + 数据库连接池)
- Linux + C + Epoll实现高并发服务器(线程池 + 数据库连接池)
- Linux + C + Epoll实现高并发服务器(线程池 + 数据库连接池)
- Linux之并发线程服务器
- Linux下C++ Socket编程
- mac下nginx搭配php-fpm解析php文件
- 【Android】一段时间不操作弹出【屏保】效果
- 速记的LINUX高编笔记1
- 苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程(精)
- c++ socket 服务器 线程池 海量 并发 windoes linux 源代码 SPServer
- Python分段下载文件
- NGINX中的线程池加速
- [Rtsp]RTSP对实时摄像头视频流进行转换(FFmpeg+FFserver)
- 使用Nginx+FFMPEG搭建HLS直播转码服务器
- CUDA编程接口:共享存储器实现矩阵相乘
- Android TAb分页菜单实现总结
- Android RxJava使用介绍(四) RxJava的操作符
- 让FFMPEG支持实时流“伴随”转码