摘要:
Author :JeffreyMy Blog:http://blog.csdn.net/gueter/引言HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。HTTP协议的主要特点可概括如下:1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POS 阅读全文
摘要:
以下为字符串匹配操作符:~为区分大小写匹配~* 为不区分大小写匹配!~和!~*分别为区分大小写不匹配及不区分大小写不匹配1: 限制某些类型的客户端的访问view plainprint?location/{if($http_user_agent~MSIE){return503;}}#限制IE访问如果把MSIE改成 Mozilla 就基本上把IE和firefox这样pc浏览器限制了2和3主要是针对盗链做处理2:针对不同的文件类型view plainprint?location~.*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)${if($ht 阅读全文
摘要:
用redhat9 下面自带的vi编写c程序;用syntax on打开了高亮,用set cindent打开了自动缩进。参考 vi设置:在主目录下,创建一个文件,文件名必须是:.vimrc其中的内容通常包括:set nu 显示行号set ic 查找时不考虑大小写set ai 设置自动缩进(autoident)set sm 显示匹配括号等(show match)set ruler 显示行号和列号set ts=2 设置tabsize为2解决乱码通常很多在Ubuntu中使用VIM编辑中文编码的文档时所看到大全是乱码,而且就算是凭记忆修改内容也会出现问题,我就遇到过这样问题,后来终于解决。其实方法很简单编 阅读全文
摘要:
概念按照 POSIX, 异步 (外部) 信号发送到整个进程.所有线程共享同一个设置, 即通过 sigaction 设置的线程处置方法.每个线程有自己的信号掩码, 线程库根据该掩码决定将信号发送到哪个线程.由于 Linux 线程实现上的独特性, 外部信号始终发送到特定的线程. pthread_sigmaskpthread_sigmask 用来定义线程的信号掩码其接口与 sigprocmask 一样=============================================================================== #include <pthre... 阅读全文
摘要:
先上代码: int flag = 1; int result = setsockopt(sock, /* socket affected */ IPPROTO_TCP, /* set option at TCP level */ TCP_NODELAY, /* name of option */ (char *) &flag,/* the cast is historical cruft */ sizeof(int)); /* length of option v... 阅读全文
摘要:
有时候我们要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要控制套接字的选项了.以下资料均从网上收集得到getsockopt 和 setsockopt获得套接口选项: int getsockopt ( int sockfd, int level, int optname, void * optval, socklen_t *opteln ) 设置套接口选项: int setsockopt ( int sockfd, int level, int optname, const void * optval, socklen_t *opteln ) sockfd(套接字): 指向一个打开的套 阅读全文
摘要:
我们先来介绍下nginxnginx :支持高并发连接.官方测试的是5w并发连接但在实际生产中可制成2-4w并发连接数,得益于nginx使用最新的epoll(linux 2.6内核)和kqueue(freebsd)网络I/O模型.而apache使用的则是传统的select模型,其比较稳定的prefork模式为多进程模式,需要经常派生子进程,所消耗的CPU等服务器资源要比nginx高的多.select 和epoll效率差的原因: select是轮询、epoll是触发式的,所以效率高。单单这样讲,那能懂了才见鬼了.好...我们暂且客观的记住这句话.先说Select:1.Socket数量限制:该模式可 阅读全文
摘要:
select()系统调用提供一个机制来实现同步多元I/O: #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); FD_CLR(int fd, fd_set *set); FD_ISSET(int fd, fd_set *set); FD_SET(int fd, fd_set *set); 阅读全文
摘要:
在高性能服务器中,一般采用非阻塞网络IO,单进程事件驱动的架构。这种架构的核心是事件驱动机制。目前Linux常用select,poll和epoll系统调用来完成事件驱动。select和poll是传统的unix事件驱动机制,但它们有很大的缺点:在大量的并发连接中,如果冷连接较多,select和poll的性能会因为并发数的线性上升而成平方速度的下降,这是因为调用者在每次select和poll返回时都要检测每个连接是否有事件发生,当连接数很大时,系统开销会非常大。另外select和poll每次返回时都要从内核向用户空间复制大量的数据,这样的开销也很大。所以,select和poll并不是处理网络IO的 阅读全文
摘要:
以前写服务器程序直接就都写成多线程的了,没考虑过其他方式,也没考虑到底哪种方式好;前些日子看些人说windows下面用完成端口、Linux下面用epoll,这些效率高。其它环境一说就是select;似乎很多人不愿意提多线程方式,也许被传说中的线程同步吓得吧;我个人还是偏向多线程方式,这样不但可以监视多端口,还可以分离业务逻辑,便于调试维护。----------------------------------------------------------------------------------------------------看明白这几个东西,需要一个环境,描述问题;就是我的程序需要 阅读全文
摘要:
poll函数 poll函数起源于SVR3,最初局限于流设备。SVR4取消了这种限制,允许poll工作在任何描述字上。poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。 1.#include <poll.h> 2. 3.int poll(struct pollfd *fdarray, unsigned long nfds, int timeout); 4. 返回:就绪描述字的个数,0-超时,-1-出错 第一个参数是指向一个结构数组第一个元素的指针。每个数组元素都是一个pollfd结构,用于指定测试某个给定描述字fd的条件。 struct pollfd{. 阅读全文
摘要:
author: 张继飞pthread_create 创建线程时,若不指定分配堆栈大小,系统会分配默认值,查看默认值方法如下:# ulimit -s8192#上述表示为8M;单位为KB。也可以通过# ulimit -a其中 stack size 项也表示堆栈大小。ulimit -s value 用来重新设置stack 大小。一般来说默认堆栈大小为 8388608;堆栈最小为 16384 。 单位为字节。堆栈最小值定义为PTHREAD_STACK_MIN ,包含#include <limits.h>后可以通过打印其值查看。对于默认值可以通过pthread_attr_getstacksi 阅读全文
摘要:
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:BOOL bDontLinger = FALSE;setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLing 阅读全文
摘要:
【getsockopt/setsockopt系统调用】功能描述: 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。用法:#include <sys/types.h>#include <sys/socket.h>intgetsockopt(int sock, int level, int 阅读全文
摘要:
一、getaddrinfo函数介绍:gethostbyname和gethostbyaddr这两个函数仅仅支持IPv4,getaddrinfo函数能够处理名字到地址以及服务到端口这两种转换,返回的是一个sockaddr结构的链表而不是一个地址清单。这些sockaddr结构随后可由套接口函数直接使用。如此以来,getaddrinfo函数把协议相关性安全隐藏在这个库函数内部。应用程序只要处理由getaddrinfo函数填写的套接口地址结构。该函数在POSIX规范中定义了。#include<netdb.h>int getaddrinfo( const char *hostname, con 阅读全文