<commit_before>---

layout: post
title: 服务器端编程
category: 架构
tags: Architecture
keywords: project

---

## 简介

* TOC
{:toc}

## 通信协议

[网络通信协议](http://qiankunli.github.io/2019/04/20/network_communication_protocol.html)

## 整体结构

来自《软件架构设计》

![](/public/upload/architecture/network_communication.png)

## 1+N+M 模型

![](/public/upload/architecture/server_side_1nm.png)


1. 监听线程，负责accept 事件的注册和处理
2. io线程，负责每个socket rw事件的注册和实际的socket 读写
3. worker线程，纯粹的业务线程，没有socket的读写操作

不同的系统实现方式会有一些差异，比如Tomcat6 的NIO网络模型

![](/public/upload/architecture/tomcat6_1nm.png)

## 服务端案例

[Redis源码分析](http://qiankunli.github.io/2019/04/20/redis_source.html)

[《Apache Kafka源码分析》——server](http://qiankunli.github.io/2019/01/30/kafka_learn_2.html)

[netty（六）netty回顾](http://qiankunli.github.io/2016/07/25/Java-Netty6.html)

## 客户端访问案例

[Jedis源码分析](http://qiankunli.github.io/2016/06/07/jedis_source.html)<commit_msg>[fix]add doc<commit_after>---

layout: post
title: 服务器端编程
category: 架构
tags: Architecture
keywords: project

---

## 简介

* TOC
{:toc}

## 通信协议

[网络通信协议](http://qiankunli.github.io/2019/04/20/network_communication_protocol.html)

## 整体结构

![](/public/upload/architecture/network_communication.png)

## 1+N+M 模型

来自《软件架构设计》

![](/public/upload/architecture/server_side_1nm.png)


1. 监听线程，负责accept 事件的注册和处理
2. io线程，负责每个socket rw事件的注册和实际的socket 读写
3. worker线程，纯粹的业务线程，没有socket的读写操作

不同的系统实现方式会有一些差异，比如Tomcat6 的NIO网络模型

![](/public/upload/architecture/tomcat6_1nm.png)

## 服务端案例

[Redis源码分析](http://qiankunli.github.io/2019/04/20/redis_source.html)

[《Apache Kafka源码分析》——server](http://qiankunli.github.io/2019/01/30/kafka_learn_2.html)

[netty（六）netty回顾](http://qiankunli.github.io/2016/07/25/Java-Netty6.html)

## 客户端访问案例

[Jedis源码分析](http://qiankunli.github.io/2016/06/07/jedis_source.html)
{'fraction_non_alphanumeric': 0.16882386043894204, 'fraction_numerical': 0.056274620146314014, 'mean_word_length': 5.35, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1689892', 'n_tokens_mistral': 1023, 'n_tokens_neox': 1062, 'n_words': 82}