网络编程–基于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. 创建 用户名/密码 […]

[阅读全文...]

Python编程-字符串的编码转换、存储及乱码问题

Python2(包括Python26、Python27等)的字符串通常包含str、unicode两种类型,通常str的字符串编码方式由源码文件的编码方式决定,目前使用的基本都是UTF-8的编码格式,所以要在py文件的头部指定编码格式: 在Python程序内部,通常使用的字符串为unicode编码,这样的字符串字符是一种内存编码格式,如果将这些数据存储到文件或是记录日志的时候,就需要将unicode编码的字符串转换为特定字符集的存储编码格式,比如:UTF-8、GBK等等,很多时候Python程序员都会遇到乱码问题,相信以下的一些处理方式和技巧能帮助大家解决乱码问题。 unic […]

[阅读全文...]

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 连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。 由于这个规范 […]

[阅读全文...]

OpenSSL编程-Python实现公钥RSAPublicKey格式与大数字符串转换

在我们的项目开发和运维过程中,经常会遇到公钥的RSAPublicKey格式数据与BIGNUM大数字符串格式数据的转换,python的rsa模块提供这方面很便捷的转换,记录一下这两个格式之间的转换函数。

[阅读全文...]