随笔分类 - tcp&http
总结tcp&http相关知识,基于工程实践
摘要:Redis的网络模型是基于I/O多路复用程序来实现的。源码中包含四种多路复用函数库epoll、select、evport、kqueue。在程序编译时会根据系统自动选择这四种库其中之一。下面以epoll为例,来分析Redis的I/O模块的源码。 epoll系统调用方法 Redis网络事件处理模块的代码
阅读全文
摘要:UNIX的五种I/O模型:阻塞式I/O模型,非阻塞式I/O模型,I/O复用模型,信号驱动式I/O模型,异步I/O模型。这些概念看似容易混淆,从UNIX底层的I/O操作的角度来分析,其实不难理解。 一个输入操作通常包括以下两个阶段: 1. 等待数据准备好;包括等待数据从网络中到达,数据到达后存入内核的
阅读全文
摘要:问题背景 NIO是面向缓冲区进行通信的,不是面向流的。我们都知道,既然是缓冲区,那它一定存在一个固定大小。这样一来通常会遇到两个问题: 消息粘包 :当缓冲区足够大,由于网络不稳定种种原因,可能会有多条消息从通道读入缓冲区,此时如果无法分清数据包之间的界限,就会导致粘包问题; 消息不完整 :若消息没有
阅读全文
摘要:问题 今天调试NIO后台发现一个蛋疼的问题。经过调试之后,出现问题的流程描述如下: 客户端向服务端发送消息,服务端使用IO多路复用处理输入,即一个selector监听多个channel。第一条消息正常接收,发送第二条消息时,select()立即返回0,然后开始continue无限循环,导致第二条消息
阅读全文
摘要:我前段时间的一篇博客 "java网络编程——多线程数据收发并行" 总结了服务端与客户端之间的收发并行实践。原理很简单,就是针对单一客户端,服务端起两个线程分别负责read和write操作,然后线程保持阻塞等待读写执行。 事实上,这样的模式非常糟糕。因为每一个客户端在服务端需要占用两条线程,假如有10
阅读全文
摘要:基本介绍与思路 收发并行 前一篇博客中,完成了客户端与服务端的简单TCP交互,但这种交互是触发式的:客户端发送一条消息,服务端收到后再回送一条。没有做到收发并行。收发并行的字面意思很容易理解,即数据的发送与接收互相不干扰,相互独立。当然,要保证服务端和客户端都能做到收发并行。 业务逻辑 脱离业务逻辑
阅读全文
摘要:还记得当年学计网课时用python实现一个简单的CS会话功能,这也是学习socket网络编程的第一步,现改用java重新实现,以此记录。 客户端 服务器端
阅读全文
摘要:博客搬家: "content type常见类型辨析(以ajax与springmvc前后端交互为例)" 在http报文的首部中,有一个字段Content type,表示请求体(entity body)中的数据类型 常见的媒体格式类型如下 text/html : HTML格式 text/plain :纯
阅读全文
摘要:博客搬家: "https搭建(自签名证书)" /) 上一篇博客探究了https(ssl)的原理,为了贯彻理论落实于实践的宗旨,本文将记录我搭建https的实操流程,使用Apache2+ubuntu+opensssl 1.使用自签证书配置https 一般来讲,正式的上线项目都需要购买域名,并且向权威机
阅读全文
摘要:博客搬家: "https原理总结" 最近在公司项目的服务器上做一些内部接口,要求使用https,于是花时间研究了一波。我们熟知的http在传输时未对数据进行加密,在传输一些敏感信息时存在着不小的安全隐患。因此,https在http的基础上加上了SSL(Secure Sockets Layer)加密,
阅读全文

浙公网安备 33010602011771号