网络编程
wenph2008
我只想静静的写会儿代码~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux 多线程应用中如何编写安全的信号处理函数
Linux 多线程应用中编写安全的信号处理函数在开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_mutex 去保护全局变量。如果应用中使用了信号,而且信号的产生不是因为程序运行出错,而是程序逻辑需要,譬如 SIGUSR1、SIGRTMIN 等,信号在被处理后应用程序还将正常运行。在编写这类信号处理函数时,应用层面的开发人员却往往忽略了信号处理函数执行的上下文背景,没转载 2013-04-29 11:10:35 · 674 阅读 · 0 评论 -
DNS原理及其解析过程 精彩剖析
网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。我们无法记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。转载 2013-05-22 13:39:35 · 795 阅读 · 0 评论 -
memcached Master-Worker 模型分析
memcached,相信我们搞linux后端的农民工都知道!这里简单的分析一下memcached是如何处理大量并发的连接的。如题,memcached是个单进程程序,单进程多线程的程序(linuxer可能会会心一笑,这不就是多进程嘛)。memcached底层是用的libevent来管理事件的,下面我们就来看看这个libevent的经典应用是如何运转的。其实一开始memcached是个正宗的单转载 2013-06-08 14:32:03 · 692 阅读 · 0 评论 -
Libevent最佳I/O复用(Multiplexing)机制的确定
libevent的初衷就是设计一个跨平台的轻量级I/0框架,由于历史问题,各平台的I/O复用机制难以统一。因此,这部分处理跨平台的方法值得重点关注。 eventop在源码中定义如下:static const struct eventop *eventops[]={#ifdef HAVE_EVENT_PORTS &evportops,#转载 2013-06-07 21:41:11 · 1199 阅读 · 0 评论 -
同步,异步,阻塞,非阻塞的理解
有些人认为异步就是非阻塞,同步就是阻塞。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,我先 限定一下本文的上下文。本文讨论的背景是Linux环境下的network IO。本文最重要的参考文献是Richard Stevens的“UNIX® Network Programming Volume 1, Third原创 2013-07-05 16:07:24 · 621 阅读 · 0 评论 -
并发TCP服务器和并发UDP服务器
第一问: 在UNP(UNIX网络编程第1卷--中文版)书上的第46页说明了并发TCP服务器的工作流程,但fork()出来的子进程端口号和父进程端口号相同(书上的ftp服务器都是21)。 在UNP(UNIX网络编程第1卷--中文版)书上的第525页说明了并发UDP服务器的工作流程,但fork()出来的子进程端口号和父进程端口号不同。 那他们(子进程和客户端)分别是怎么通原创 2013-06-06 12:38:06 · 3148 阅读 · 2 评论 -
由12306.cn谈谈网站性能技术
12306.cn网站挂了,被全国人民骂了。我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题。因为仓促,而且完全基于本人有限的经验和了解,所以,如果有什么问题还请大家一起讨论和指正。(这又是一篇长文,只讨论性能问题,不讨论那些UI,用户体验,或是是否把支付和购票下单环节分开的功能性的东西)业务任何技术都离不开业务需求,所以,要说明性能问题,首先还是想先说说业务转载 2013-07-05 15:04:59 · 864 阅读 · 0 评论 -
三大WEB服务器对比分析(apache ,lighttpd,nginx)
一.软件介绍(apache lighttpd nginx)1. lighttpdLighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth,输出压缩(output compress), URL重写, Alias等重要功能转载 2013-07-04 17:28:25 · 850 阅读 · 0 评论 -
性能调优攻略
关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法。本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充。在开始这篇文章之前,大家可以移步去看一下酷壳以前发表的《代码优化概要》,这篇文章基本上告诉你——要进行优化,先得找到性能瓶颈转载 2013-07-05 17:08:39 · 901 阅读 · 0 评论 -
网站跨站点单点登录SSO
1 什么是单点登陆 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 较大的企业内部,一般都有很多的业务支持系统为其提供相应的管理和IT服务。例如财务系统为财务人员提供财务的管理、计算和报表服务;人事系统为人事部门 提供全公司人员的维转载 2013-08-02 11:21:12 · 1824 阅读 · 0 评论 -
Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’问题
方案: 摘要:解决不能通过mysql .sock连接MySQL问题 这个问题主要提示是,不能通过 '/tmp/mysql .sock'连到服务器,而php标准配置正是用过'/tmp/mysql .sock',但是一些mysql 安装方法 将 mysql .sock放在/var/lib/mysql .sock或者其他的什么地方,你可以通过修改/etc/my.cnf文件来修正它,打开文件,原创 2013-08-05 17:58:14 · 833 阅读 · 0 评论 -
NAT之SNAT和DNAT
精彩待续原创 2013-10-21 12:08:18 · 4447 阅读 · 0 评论 -
关于Linux的进程和线程
什么是进程直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源,所以我们也说,进程是资源分配的最小单位。什么是线程线程存在与进程当中,是操作系统调度执行的最小单位。说通俗点,线程就是干活的。进程和线程的区别转载 2013-05-04 15:28:42 · 623 阅读 · 0 评论 -
socket同步异步,阻塞,非阻塞的概念解析集合
第一种解释:Socket传输中拿TCP传输为例。假设服务器A 客户机B进行通信传输。首先需要在A机建立监听线程。监听某一端口,那么B机可以向A机发送通讯请求,B机连接到A机以后。A机可以从他的监听队列中取的一个监听对象。在A端拿到了这个Socket对象就可以进行接收跟发送数据了。这里问题就出现了。假如B端在请求A端的时候请求成功就发送一条数据。那么 A端就可以直接拿Socket对象得到他的转载 2013-05-03 09:31:28 · 985 阅读 · 0 评论 -
Linux线程池
/* 小规模的Linux线程池 written by luoxiongwei E-mail:luo6620378li@qq.com Welcom to report bugs! 下一步计划给工作队列中的任务添加优先级 实现一个优先队列。*/#ifndef __THREADPOOLS#define __THREADPOOLS#include #include #includ转载 2013-05-01 21:57:46 · 819 阅读 · 0 评论 -
网络编程指南--网络套接口(Internet Sockets)
介绍Hey! Socket 编程让你沮丧吗?从 man pages 中很难得到有用的信息吗?你想 跟上时代去做一做 Internet 程序,但是为你在调用 connect() 前的 bind() 的结构而愁眉不展?…好了,我现在已经来了,我将和所有人共享我的知识了。如果你了解 C 语言并想穿过 网络编程的沼泽,那么你来对地方了。读者这个文档是写成一个指南,而不是参考书。转载 2013-04-28 09:48:15 · 1763 阅读 · 0 评论 -
TinyXML解析xml文档
l TinyXML简介TinyXML是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作,尤其适用于游戏开发,在Nebula2,CEGUI等开源项目中都有使用。 名称访问接口是否支持验证备注ExpatSAX/转载 2013-04-28 09:52:20 · 688 阅读 · 0 评论 -
select poll epoll联系区别
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);int poll(struct pollfd *fds, nfds_t nfds, int timeout);int epoll_wait(int epfd, struct epoll_event原创 2013-04-27 23:21:39 · 701 阅读 · 0 评论 -
select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型: #include #include int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *t原创 2013-04-27 23:20:33 · 483 阅读 · 0 评论 -
小小线程池
线程池:一般一个简单线程池至少包含下列组成部分。1.线程池管理器(ThreadPoolManager):创建线程池,销毁线程池,添加新任务。2.工作线程(WorkThread): 线程池中线程3.任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。任务接口是为所有任务提供统一的接口,以便工作线程处理。任务接口主要规定了任务的入口,任务执行完原创 2013-04-27 23:12:10 · 516 阅读 · 0 评论 -
Linux 线程模型的比较:LinuxThreads 和 NPTL
当 Linux 最初开发时,在内核中并不能真正支持线程。但是它的确可以通过 clone() 系统调用将进程作为可调度的实体。这个调用创建了调用进程(calling process)的一个拷贝,这个拷贝与调用进程共享相同的地址空间。LinuxThreads 项目使用这个调用来完全在用户空间模拟对线程的支持。不幸的是,这种方法有一些缺点,尤其是在信号处理、调度和进程间同步原语方面都存在问题。另外,这个转载 2013-04-29 11:11:21 · 637 阅读 · 0 评论 -
Linux多线程中使用信号
在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别,可以说是完全不同。在进程环境中,对信号的处理是,先注册信号处理函数,当信号异步发生时,调用处理函数来处理信号。它完全是异步的(我们完全不知到信号会在进程的那个执行点到来!)。然而信号处理函数的实现,有着许多的限制;比如有一些函数不能在信号处理函数中调用;再比如一些函数read、recv等调用时会被异步的信号给中断(inter转载 2013-04-29 11:09:32 · 742 阅读 · 0 评论 -
read()/write()/pread()/pwrite()等等
在Linux和UNIX中有很多的输入输出函数,有时真是让想跟它攀点关系的菜鸟们束手无策。先来看看都有哪些函数,通过解析与总结,看看能不能让大家能这些函数有个理性的认识,哦,原来是这么回事,也就算我没白花这份闲。内核文件I/O->标准库I/O->高级I/O->IPC中1. read()/write();2. pread()/pwrite();3. getc()/put转载 2013-04-28 09:49:37 · 1845 阅读 · 0 评论 -
三种发送UDP包的函数
send()的例子:#include#include#includevoid Recv(){struct sockaddr_in serv_addr;int sock_fd;char line[15] = "Hello world!";int size = 13;serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_原创 2013-04-27 23:13:19 · 2150 阅读 · 0 评论 -
Linux 信号signal处理机制
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。 一、信号的基本概念 本节先介绍信号的一些基本概念,然后给出一转载 2013-04-27 18:47:18 · 470 阅读 · 0 评论 -
一个Linux下C线程池的实现
什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。 下面是Linux系统下用C语言创建的一个线程池。线程池会维护一个任务链表(每个CThread_worker结构就是一个任务)。 p转载 2013-05-01 21:55:41 · 576 阅读 · 0 评论 -
比较全面的gdb调试命令
用GDB调试程序 GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更原创 2013-04-27 23:11:29 · 606 阅读 · 0 评论
分享