keep_simple

导航

2013年4月28日 #

C++ Boost Thread 编程指南

摘要: 标准C++线程即将到来。CUJ预言它将衍生自Boost线程库,现在就由Bill带领我们探索一下Boost线程库。就 在几年前,用多线程执行程序还是一件非比寻常的事。然而今天互联网应用服务程序普遍使用多线程来提高与多客户链接时的效率;为了达到最大的吞吐量,事务服 务器在单独的线程上运行服务程序;GUI应用程序将那些费时,复杂的处理以线程的形式单独运行,以此来保证用户界面能够及时响应用户的操作。这样使用多线 程的例子还有很多。但是C++标准并没有涉及到多线程,这让程序员们开始怀疑是否可能写出多线程的C++程序。尽管不可能 写出符合标准的多线程程序,但是程序员们还是会使用支持多线程的操作系统提供的多 阅读全文

posted @ 2013-04-28 15:17 keep_simple 阅读(524) 评论(0) 推荐(0)

简易tcp服务器

摘要: server:View Code 1 #include <stdlib.h> 2 #include <string.h> 3 #include <iostream> 4 #include <sys/socket.h> 5 #include <sys/epoll.h> 6 #include <netinet/in.h> 7 #include <arpa/inet.h> 8 #include <fcntl.h> 9 #include <unistd.h> 10 #include <st 阅读全文

posted @ 2013-04-28 14:42 keep_simple 阅读(331) 评论(0) 推荐(0)

有关send()和recv()函数的理解

摘要: ssize_t send(int sock, const void *buf, size_t len, int flags);不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数:第一个参数指定发送端套接字描述符;第二个参数指明一个存放应用程序要发送数据的缓冲区;第三个参数指明实际要发送的数据的字节数;第四个参数一般置0。 这里只描述同步Socket的send函数的执行流程。当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲的长度,如果len大于s的 阅读全文

posted @ 2013-04-28 13:55 keep_simple 阅读(626) 评论(0) 推荐(0)

HTTP协议详解(真的很经典)

摘要: HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断 地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议的主要特点可概括如下:1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因 阅读全文

posted @ 2013-04-28 13:52 keep_simple 阅读(428) 评论(0) 推荐(0)

unix/linux socket设置非阻塞

摘要: UNIIX/linux下SOCKET主要是同步的,但有阻塞和非阻塞两种方式。阻塞方式定义与前面定义相同,要解决阻塞有两种方法:一种是设置SOCKET属性,设置为非阻塞(fcntl()函数),sockfd = socket(AF_INET, SOCK_STREAM, 0); fcntl(sockfd, F_SETFL, O_NONBLOCK); 通过设置套接字为非阻塞,你能够有效地"询问"套接字以获得信息。如果尝试着从一个非阻塞的套接字读信息并且没有任何数据,它不允许阻 塞,它将返回 -1 并将 errno 设置为 EWOULDBLOCK。二种是通过select的方式 阅读全文

posted @ 2013-04-28 13:40 keep_simple 阅读(824) 评论(0) 推荐(0)

send和recv解释

摘要: int send(int s, const void *msg, size_t len, int flags); flags取值有:0: 与write()无异MSG_DONTROUTE:告诉内核,目标主机在本地网络,不用查路由表MSG_DONTWAIT:将单个I/O操作设置为非阻塞模式MSG_OOB:指明发送的是带外信息int recv(int s, void *buf, size_t len, int flags);flags取值有:0:常规操作,与read()相同MSG_DONTWAIT:将单个I/O操作设置为非阻塞模式MSG_OOB:指明发送的是带外信息MSG_PEEK:可以查看可读的信 阅读全文

posted @ 2013-04-28 13:36 keep_simple 阅读(1427) 评论(0) 推荐(0)

非阻塞I/O

摘要: 套接口缺省是阻塞的。这一点意味着当发出一个不能立即完成的套接口调用时,其进程将被投入睡眠,等待相应操作完成。可能阻塞的套接口调用可分为一下四类。1 输入操作:包括read, readv, recv,recvfrom和recvmsg共5个函数。如果某个进程对一个阻塞的TCP套接口调用这些输入函数之一,而且该套接口的接收缓冲区中没有数据可读,该进程将被投入睡眠,知道达到一些数据。因为TCP是字节流协议,该进程的唤醒就是只要达到一些数据:这些数据既可以是单个字节,也可以是一个完整的TCP分节中的数据。如果想等到某个固定数目的数据可读为止,那么可以调用readn函数或者指定MSG_WAITALL标志。 阅读全文

posted @ 2013-04-28 13:33 keep_simple 阅读(271) 评论(0) 推荐(0)

C10K问题探讨

摘要: 编写连接数巨大的高负载服务器程序时,经典的多线程模式和select模式都不再适用。 应当抛弃它们,采用epoll,kqueue,dev/poll来捕获I/O事件。最后简要介绍了AIO。由来 网络服务在处理数以万计的客户端连接时,往往出现效率低下甚至完全瘫痪,这被称为C10K问题。随着互联网的迅速发展,越来越多的网络服务开始面临C10K问题,作为大型网站的开发人员有必要对C10K问题有一定的了解。本文的主要参考文献是<http://www.kegel.com/c10k.html>。 C10K问题的最大特点是:设计不够良好的程序,其性能和连接数及机器性能的关系往往是非线性的。举个例子: 阅读全文

posted @ 2013-04-28 13:18 keep_simple 阅读(264) 评论(0) 推荐(0)

TCP状态转换机说明

摘要: 建立一个 TCP 连接TCP 是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本节将详细讨论一个TCP 连接是如何建立的以及通信结束后是如何终止的。TCP使用三次握手 ( three-way handshake ) 协议来建立连接,图 3-10 描述了三次握手的报文序列。这三次握手为: 请求端(通常称为客户)发送一个 SYN 报文段( SYN 为 1 )指明客户打算连接的服务器的端口,以及初始顺序号( ISN )。服务器发回包含服务器的初始顺序号的 SYN 报文段( SYN 为 1 )作为应答。同时,将确认号设置为客户的 ISN 加 1 以对客户的 SYN 阅读全文

posted @ 2013-04-28 13:04 keep_simple 阅读(351) 评论(0) 推荐(0)