
网络编程
网络编程相关的干货
全菜工程师小辉
微信公众号:全菜工程师小辉。欢迎关注~
展开
-
手写RPC框架指北另送贴心注释代码一套
Angular8正式发布了,Java13再过几个月也要发布了,技术迭代这么快,框架的复杂度越来越大,但是原理是基本不变的。所以沉下心看清代码本质很重要,这次给大家带来的是手写RPC框架。完整代码以及说明文档,点我跳跃~1. 什么是RPC?RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要...原创 2019-06-02 23:37:35 · 5588 阅读 · 0 评论 -
Java秒杀系统优化的工程要点
这篇博客是笔者学习慕课网若鱼老师的《Java秒杀系统方案优化 高性能高并发实战》课程的学习笔记。若鱼老师授课循循善诱,讲解由浅入深,欢迎大家支持。本文记录课程中的注意点,方便以后code review。此外,本文将注意点相关的优质讲解链接在了一起,方便初学者系统学习。本文并非单纯介绍秒杀系统特有的技术点,不适合高手。进阶学习的话,极客时间有个不错的小专栏——如何设计一个秒杀系统,阿里高级技术...原创 2019-06-11 21:24:52 · 8068 阅读 · 0 评论 -
TCP粘拆包详解与Netty代码示例
TCP是个“流”协议,所谓流,就是没有界限的一串数据。可以想想河里的流水,是连成一片的,其间并没有分界线。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。有关TCP的详细讲解,可以点击查看这一篇和另外一篇...原创 2019-06-28 08:00:00 · 6386 阅读 · 0 评论 -
快速了解UDP协议
互联网工程任务组(IETF)官员透露,HTTP-over-QUIC实验协议将重命名为HTTP/3,并有望成为HTTP协议的第三个正式版本。Quic(QuickUDP Internet Connections)是一种新的传输方式,与TCP相比,它减少了延迟。表面上,Quic非常类似于在UDP上实现的TCP+TLS+HTTP/2。由于TCP是在操作系统内核和中间件固件中实现的,因此对TCP进行重大...原创 2019-06-23 08:00:00 · 6138 阅读 · 0 评论 -
快速了解Https
HTTPS简介HTTPS:https是http与ssl的结合,为了解决http明文传输导致信息泄露的问题。ssl通过公钥和私钥保证客户端和服务器之间的通讯加密,由权威机构办法的数字证书杜绝了中间人攻击的可能。默认端口为443。SSL需要到ca申请证书,一般免费证书较少,因而需要一定费用。(笔者一直用阿里云,有个免费ssl申请,还是挺适合个人使用的。据说其他云商也有免费ssl)有关...原创 2019-06-22 08:00:00 · 6292 阅读 · 0 评论 -
NIO效率高的原理之零拷贝与直接内存映射
前言在笔者上一篇博客,详解了NIO,并总结NIO相比BIO的效率要高的三个原因,点击查看。这篇博客将针对第三个原因,进行更详细的讲解。首先澄清,零拷贝与内存直接映射并不是Java中独有的概念,并且这两个技术并不是等价的。零拷贝零拷贝是指避免在用户态(User-space) 与内核态(Kernel-space) 之间来回拷贝数据的技术。传统IO传统IO读取数据并通过网络发...原创 2019-07-31 08:00:00 · 12996 阅读 · 2 评论 -
彻底搞懂Netty高性能之零拷贝
作为Java网络编程学习者,不仅要知道NIO,还一定要学习Mina和Netty这两个优秀的网络框架。作为上一篇NIO效率高的原理之零拷贝与直接内存映射的补充,本文将针对Netty的零拷贝特性进行详细分析。Netty高性能的原因Netty作为异步事件驱动的网络框架,高性能主要来自于其I/O模型和线程处理模型,前者决定如何收发数据,后者决定如何处理数据。Netty高性能的原因总结,智者见智...原创 2019-08-01 08:00:00 · 5640 阅读 · 0 评论 -
彻底搞懂Reactor模型和Proactor模型
在高性能的I/O设计中,有两个著名的模型:Reactor模型和Proactor模型,其中Reactor模型用于同步I/O,而Proactor模型运用于异步I/O操作。想要了解两种模型,需要了解一些IO、同步异步的基础知识,点击查看服务端的线程模型无论是Reactor模型还是Proactor模型,对于支持多连接的服务器,一般可以总结为2种fd和3种事件,如下图:2种fd l...原创 2019-08-05 08:00:00 · 3890 阅读 · 0 评论 -
你该用HTTP2了
HTTP版本简史HTTP/0.9:(1991年)基于GET请求的文本传输协议HTTPS:(1994年)安全的HTTP传输协议HTTP/1.0:(1996年)增加HTTP头、扩展PUT、POST等方法HTTP/1.1:(1999年)长连接、流水线支持,最广泛使用的HTTP传输协议SPDY:(2012年)针对HTTP的增强,工作在SSL层之上、HTTP层之下HTTP/2:(2...原创 2019-05-29 23:08:06 · 5557 阅读 · 0 评论 -
关于三次握手与四次挥手你要知道这些
TCP的整个连接过程如果没有基础的话,直接看这张图或者网络上各种文字描述,十分生涩,所以先看懂接下来的握手挥手的图,理解之后,再看这个有限状态机就感觉原来如此简单。三次握手握手过程第一次握手:主机A发送位码为syn=1,随机产生seq number=x的数据包到服务器,客户端进入SYN_SEND状态,等待服务器的确认;主机B由SYN=1知道A要求建立连接。第二次握手:主机B收到请...原创 2019-05-31 21:55:48 · 5657 阅读 · 0 评论 -
Swoole引擎原理的快速入门干货
过去半年使用PHP和Java两种技术栈完成了一个游戏服务器项目。由于项目中有高频的网络请求,所以PHP技术栈尝试使用Swoole引擎(基于事件的高性能异步并行网络通信引擎)来完成部分游戏业务。Swoole的安装安装swoole很简单,由于是国人做的项目,很多issue可以在官网文档找到答案。安装分两种:编译安装。直接去github或者gitee去下载官方的发行版,编译安装后,将so拓展写入...原创 2019-05-04 22:24:11 · 6414 阅读 · 0 评论 -
Mina的WebSocket问题排查
笔者上个项目经历过的一个bug。项目使用mina进行收发包,收发包的代码是直接从Apache讨论组那边拷贝过来的。在后来的开发过程中,就出现了不必现的网络包读取失败,导致websocket连接中断。过程和下面转载的文章提到的差不多,结论是一样的,所以记录下来,方便mina使用者跳过这个坑。转载请注明文章出处:https://tlanyan.me/resolve-mina-websocke...转载 2019-08-07 10:01:01 · 1028 阅读 · 0 评论