分类目录归档:技术架构

网络编程–基于epoll+coroutine(协程)的EchoServer编程示例

以下为采用Linux下epoll+coroutine(协程)方式的EchoServer示例。 协程方式让异步回调的编码方式变为了顺序处理的编码方式,使得业务处理更易理解,以下示例使用云风开源的coroutine项目。 1.每个连接应该包含一个epoll_event和协程co,用于此连接上读写事件的监听,同时此连接上面还包含读写缓存、用户数据等 2. 客户端链接构造和析构函数 3. 异步编程,所有连接描述符都是非阻塞的 4. 主程序结构 5. 创建、并绑定本地端口 6. 服务器端应设置端口重用、关闭连接数据处理方式等socket option 7. 主进程/主线程监听到客户端 […]

[阅读全文...]

网络编程–基于epoll的EchoServer编程示例

以下为采用Linux下epoll方式的EchoServer示例 1.每个连接应该包含一个epoll_event,用于此连接上读写事件的监听,同时此连接上面还包含读写缓存、用户数据等 2. 客户端连接构造和析构函数 3. 异步编程,所有连接描述符都是非阻塞的 4. 主程序结构 5. 创建、并绑定本地端口 6. 服务器端应设置端口重用、关闭连接数据处理方式等socket option 7. 主进程/主线程监听到客户端连接的处理 8. 对客户端读事件的处理,读完成后要向事件驱动器中加入写事件监测 9. 对客户端写事件的处理,写事件完成后要从事件驱动器中停止写事件监测 备注:对于客 […]

[阅读全文...]

网络编程–基于libev的EchoServer编程示例

目前网上很多libev的EchoServer都非常简洁,在对客户端读写事件时的处理都不够明晰,现在简单介绍一个对一个客户端连接在进行异步读写时的处理,并给出一个可以执行的代码版本。 对于多进程/多线程编程框架还需要进行扩展,通常由主进程或线程启动异步事件驱动器进行网络监听,将客户端的连接放到业务处理线程自身的异步事件驱动器中,然后对每个客户端再进行业务处理,为避免客户端的慢操作或是耗时操作,业务线程还可以引入协程,对这些耗时操作使用协程处理,避免业务线程的阻塞。 1. 每个连接应该是一个独立的结构体,包含事件循环驱动器、事件读写监视器,以及此连接上面的读写缓存、用户数据等 […]

[阅读全文...]

电子邮件技术–Quoted-Printable编码(QP编码)详解

一、背景 Quoted-Printable编码可译为“可打印字符引用编码”,或者“使用可打印字符的编码”。 通常我们接收电子邮件,查看电子邮件原始信息,经常会看到这种类型的编码!电子邮件信头显示:Content-Transfer-Encoding: quoted-printable 它是多用途互联网邮件扩展(MIME) 一种实现方式。其中MIME是一个互联网标准,它扩展了电子邮件标准,致力于使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。目前http协议中,很多采用MIME框架!quoted-printable 就是说用一些可打印常用字符,表示一个字节(8 […]

[阅读全文...]

Linux下基于HTTP协议带用户认证的GIT开发环境设置

Git 的访问可以采用 HTTP 或 SSH 协议安全的访问,通常我们使用 gitlib 进行 Web 管理,但是在 Linux 命令行开发环境下,基本都是使用 SSH 协议,只需要在 gitlib 里面配置好相应的 SSH Key 就可以。 由于现在开发环境的特殊情况,我们需要在 Linux 命令行开发环境下,不能使用 SSH 方式,而只能使用 HTTP 协议进行安全访问,并且需要对开发者进行认证,并且开发者在本地开发环境中的用户名和密码需要加密存储。 接下来我就简单介绍我们的开发团队是如何在 Linux 命令行环境下进行 GIT 开发环境配置。 1. 创建 用户名/密码 […]

[阅读全文...]

Nginx应用-Location路由反向代理及重写策略

一、Nginx的反向代理的路由策略 Nginx是著名的高性能Web服务器,应用在很多Web服务领域,同时开发和部署过程中,为了更好的控制接口API(或是WebService),我们需要严格的或是谨慎的规划URL的使用,这样才能为以后的扩张、迭代打下良好的基础,否则杂乱无章的URL使用,将是以后大规模扩展的噩梦。 Location的配置 语法规则: 语法说明: 匹配优先级: 示例: 二、Nginx的Rewrite规则 语法规则: rewrite指令的最后一项参数为flag标记,flag标记有: 示例: 三、Nginx常用设置 1.为了便于日志统计和分析,备注一个日志示例格式, […]

[阅读全文...]

HTTP协议-POST方法详解

一、HTTP协议 HTTP/1.1协议(http://www.faqs.org/rfcs/rfc2616.html)规定的HTTP请求方法有:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT这几种。 其中POST方法一般用来向服务端提交数据,接下来我们主要讨论POST提交数据的几种方式。 二、POST方法 通常HTTP协议是以ASCII编码进行传输,建立在TCP/IP协议之上的应用层协议。HTTP协议报文将请求分为三个部分:状态行、请求头、消息主体。 协议格式如下: HTTP协议规定POST提交的数据必须放在消息主体(entity […]

[阅读全文...]

Tornado编程-WebSocket原理及代码示例

一. WebSocket协议 WebSocket 协议本质上是一个基于 TCP 的协议。 为了建立一个 WebSocket 连接,客户端浏览器首先要向服务器发起一个 HTTP 请求,这个请求和通常的 HTTP 请求不同,包含了一些附加头信息,其中附加头信息”Upgrade: WebSocket”表明这是一个申请协议升级的 HTTP 请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket 连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。 由于这个规范 […]

[阅读全文...]

邮件服务器-电子邮件系统架构设计及介绍

1. 背景 Email和BBS服务应该是互联网最古老的两大网络应用,伴随着Internet的发展,两大应用也都产生着各自的变化,很多网络应用服务也都是从这两大应用演化而来,然后电子邮件系统也进行着自身的演化,从最早的机构内部系统慢慢演化到面向免费个人用户的超级系统,又逐渐进入企业级服务领域,满足着企业级的多种业务需要。 在电子邮件系统开发领域做了10年之久,经历了几代WebMail体系开发变化,亲自完成了全新一代MTA引擎的开发,回想起整个电子邮件系统的方方面面,让人觉得其中还有无数可以让人继续为之努力的方向,而且很多部分可能在接下来的几年仍然会有很大的颠覆变化。可能不太熟 […]

[阅读全文...]

生产环境优雅的重启基于Nginx、Tornado的Web服务进程

Nginx是一个高效的Web服务器及代理服务器,Tornado是一个基于epoll的异步Web开发框架,通常使用Nginx做为Web服务器时,都会以FastCGI模式,而我们从开发、调试、运维的角度考虑,使用了反向代理的模式,同时Nginx可以做一些特殊业务和负载均衡的处理。 其实反向代理模式很简单,Nginx监听在80端口,做为Web服务端口,而Tornado的Web服务进程监听在808*的内部端口(可以启动多个进程),使用supervisor对Nginx、Tornado服务进程进行统一的管理。 首先看supervisor的配置: 启动脚本(可以放到start.sh中): […]

[阅读全文...]