Posts
All the articles I've posted.
-
多进程并发服务器
我们来考虑有多个客户同时连接一个服务器的情况。在前面的TCP套接字编程的例子中,我们已经看到,服务器程序在接受来自客户端的一个新连接时,会创建出一个新的套接字(已连接套接字),而原先的监听套接字则继续监听后面的连接请求。如果服务器不能立刻接受后来的连接,它们将被放到队列中以等待处理。 原先的套...
-
监听套接字与已连接套接字
监听套接字(listening socket)和已连接套接字(connected socket)之间的区别常会使很多人感到迷惑。本文简要描述一下这两者的区别。 为了说明监听套接字与已连接套接字的区别,我们先来看一下套接字在连接中的含义。 从内核的角度来看,一个套接字就是通信的一个端点。一个连接...
-
TCP套接字编程入门
概述 套接字(socket)是一种通信机制,凭借这种机制,客户与服务器的通信既可以在本地单机上进行,也可以跨网络进行。 图:基本的TCP客户/服务器应用程序的套接字函数 图中展示了一对TCP客户与服务器进程之间进行通信时调用套接字函数的交互情况。服务器首先启动,然后监听客户的连接。稍后客户试图...
-
UDP 套接字编程入门
概述 在使用TCP编写的应用程序和使用UDP编写的应用程序之间存在一些本质差异,其原因在于这两个传输层之间的差别:UDP是无连接不可靠的数据报协议,不同于TCP提供的面向连接的可靠字节流。从资源的角度来看,相对来说UDP套接字开销较小,因为不需要维持网络连接,而且因为无需花费时间来连接连接,所...
-
Windows 编程概述
本文对windows编程中涉及的一些基本概念作一个简单的概述。 事件驱动 Windows 应用程序基于事件驱动模型,windows应用程序启动后会一直等待事件的发生。 常见的事件包括,键盘某个按键被按下,鼠标单击,窗口按钮被点击,窗口可见,等等。 消息与消息队列 Windows 操作系统使用消...
-
图解UNIX的I/O模型
一、简述 UNIX系统将所有的外部设备都看作一个文件来看待,所有打开的文件都通过文件描述符来引用。文件描述符是一个非负整数,它指向内核中的一个结构体。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。而对于一个socket的读写也会有相应的文件描述符,称为socketfd(s...
-
Google Protocol Buffers 体验日志
最近在看RPC的相关的实现,其中google的 gRPC 默认使用 Protocol Buffers 来作为其接口描述语言(IDL,Interface Definition Language)以及使用 Protocol Buffers 实现消息的序列化与反序列化。因此,很有必要对 protoc...
-
TCP的连接管理
简述 TCP是面向连接的协议,TCP把连接作为最基本的抽象。每一条TCP连接唯一地被通信两端的两个端点所确定。那么,TCP连接的端点是什么呢?TCP连接的端点又叫套接字(socket),根据TCP协议的规定,端口号拼接到IP地址即构成了套接字,即 > 套接字 socket = (IP地址:端口...
-
Redis Sentinel 学习笔记
概述 Redis Sentinel 是用来实现 Redis 高可用的一套解决方案。Redis Sentinel 由两个部分组成:由一个或者多个 Sentinel 实例组成 Sentinel 系统;由一个主 Redis 服务器(master redis)和多个从 Redis 服务器(slave ...
-
ZooKeeper的Znode剖析
在ZooKeeper中,节点也称为znode。由于对于程序员来说,对zk的操作主要是对znode的操作,因此,有必要对znode进行深入的了解。 ZooKeeper采用了类似文件系统的的数据模型,其节点构成了一个具有层级关系的树状结构。例如,图1展示了zk节点的层级树状结构。 图1:ZooKe...
-
ZooKeeper命令简介
ZooKeeper的客户端包括Java版本和C语言版本。使用Java版本连接zk的命令以下: 执行此命令,客户端成功连接上zk,会有类似以下的输出,其中,包括“Welcome to ZooKeeper!”的欢迎语,以及其他一些连接的信息等。 连接成功后,便可以使用命令与zk服务进行交互。
-
ZooKeeper的安装与部署
本文讲述如何安装和部署ZooKeeper。 一、系统要求 ZooKeeper可以运行在多种系统平台上面,表1展示了zk支持的系统平台,以及在该平台上是否支持开发环境或者生产环境。 表1:ZooKeeper支持的运行平台 系统 生产环境 ----------------Linux 支持 So...
-
ZooKeeper概览
一、简介 ZooKeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如同步,集群管理,命名空间,配置维护等。ZooKeeper使用了我们熟悉的文件树状结构作为自己的数据模型,因此是易于使用的。 我们知道,由于资源竞争等因素...
-
如何理解Nginx, WSGI, Flask之间的关系
概览 之前对 Nginx,WSGI(或者 uWSGI,uwsgi),Flask(或者 Django),这几者的关系一存存在疑惑。通过查阅了些资料,总算把它们的关系理清了。 总括来说,客户端从发送一个 HTTP 请求到 Flask 处理请求,分别经过了 web服务器层,WSGI层,web框架层,...
-
RPC 基本原理与 Apach Thrift 初体验
概述 RPC(Remote Procedure Call,远程过程调用)是一个计算机通信协议,此协议允许进程间通信。简单来说,当机器 A 上的进程调用机器 B 上的进程时,A 上的调用进程被挂起,而 B 上的被调用进程开始执行。调用方可以通过参数将信息传送给被调用方,然后可以通过被调用方传回的...
-
细说 C++ Traits Classes
最近在看侯捷的《STL源码剖析》,看到第三章有关 traits 的介绍,被搞得一头雾水,看了半天不知所云。为了彻底了解这个技法的原理,硬着头皮上网查了资料,并结合 Scott Meyers 的 《Effective C++》,总算是把 traits 的原理搞明白了:) 什么是 traits?我...
-
体验 gRPC 那些事儿
概述 我们来看 google 对于 gRPC 的定义: > A high performance, open-source universal RPC framework 即 gRPC 是一个开源的高性能通过 RPC 框架。具体来说,它具有以下特点: 使用 protocol buffers 来...
-
Git远程仓库
Git 支持在本地仓库进行程序项目的版本管理,这个本地的 git 仓库在程序项目的文件夹内(也就是 “.git” 文件夹内)。随着程序项目的推进,我们会把不同阶段的文件内容加入到这个 git 仓库中。这个仓库由我们直接操控,我们将它称之为“本地 git 仓库”。 除了“本地 git 仓库”外,...
-
MongoDB Java使用指南
MongoDB是当今非常流行的一款NoSQL数据库,本文介绍如何使用MongoDB的Java驱动来操作MongoDB。 一、引入MongoDB Java Driver包 如果需要操作MongoDB的Java项目是一个Maven项目,可以在依赖中加上以下的配置。 或者通过直接下载jar包的方式使...
-
Python Requests库简明使用教程
Requests是一常用的http请求库,它使用python语言编写,可以方便地发送http请求,以及方便地处理响应结果。 一、安装 1.1 使用pip进行安装 要安装requests,最方便快捷的方法是使用pip进行安装。 > pip install requests 如果还没有安装pip,...