socket

java中TCP、UDP的简单网络编程

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-08 17:39:57
文章目录 一、有关网络编程概念 二、TCP网络编程 2.1 TCP网络编程的客户端 2.2 TCP网络编程的服务端 三、UDP网络编程 3.1 UDP发送端 3.2 UDP的接收方 一、有关网络编程概念 传输层实现端到端的通信,因此,每一个传输层连接有两个端点。那么,传输层连接的端点是什么呢?不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口。传输层连接的端点叫做套接字(socket)。所谓套接字,实际上是一个通信端点,每个套接字都有一个套接字序号,包括主机的IP地址与一个16位的主机端口号,即形如(主机IP地址:端口号)。例如,如果IP地址是210.37.145.1,而端口号是23,那么得到套接字是(210.37.145.1:23)。 总之,套接字Socket=(IP地址:端口号)。 有关网络编程中的API: java.net包下的InetAddress类:此类表示互联网协议(IP)地址。 (1)InetAddress getLocalHost() 域名:www.baidu.com 因为IP地址的数字较长,不方便记忆。所以设计了域名,来与IP地址对应。 由域名解析器(DNS)来解析对应关系。InetAddress getByName(xx) 来获取主机名和ip地址 二、TCP网络编程 2.1 TCP网络编程的客户端 TCP网络编程的客户端: 1

Nginx的架构及工作流程

て烟熏妆下的殇ゞ 提交于 2020-03-08 14:47:23
NGINX是一个免费的,开源的,高性能的HTTP服务器和反向代理,以及IMAP / POP3代理服务器。 NGINX以其高性能,稳定性,丰富的功能集,简单的配置和低资源消耗而闻名,也是为解决 C10K问题 而编写的服务器之一。本文主要介绍Nginx的架构及工作流程。 一、Nginx的架构如下图 1.nginx启动后会有一个master进程和多个worker进程(woeker进程数量可配置,一般设置与机器的核心数一致),master进程负责管理worker进程(接收外界信号,发送信号到各worker进程,监控worker进程的运行状态)。 2.基本的网络事件,由worker进程负责处理,各worker进程之间是对等和相互独立的,共同竞争来至客户端的请求。 3.nginx是基于多进程模式、事件驱动的异步非阻塞IO模型。 二、nginx多进程+异步非阻塞IO模型的优点 1.进程之间相互独立,一个进程异常,其他进程不会受到影响,能够继续服务,保证服务的稳定性。 2.独立进程之间资源隔离,避免了很多不必要的锁操作,提高程序处理效率。 3.避免了多线程模型下常见的上下文切换问题,虽然多进程模型会导致服务并发数降低,但异步非阻塞IO解决了这个问题。 三、多进程间如何协作 1.多进程工作可能会产生的‘ 惊群效应 ’问题 多进程工作模式如下图: 一个连接进来,每个worker进程都有可能处理这个连接

python中socket、socketio、flask-socketio、WebSocket的区别与联系

旧巷老猫 提交于 2020-03-08 14:33:53
socket、socketio、flask-socketio、WebSocket的区别与联系 socket 是通信的基础,并不是一个协议,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族和UDP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 WebSocket 是html5新增加的一种通信协议,可以类比于http协议。常见的应用方式如弹幕、web在线游戏。 socketio 是基于socket连接后(并没有自己实现socket的链接而是复用了web框架或gevent、eventlet中的socket)对网络输入输出流的处理,封装了send、emit、namespace、asyncio 、订阅等接口,同时扩展使用了redis、rabbitmq消息队列的方式与其他进程通信。 flask-socketio 是socketio对flask的适配,封装了emit、send和关于room的操作。 select的链接、发送等底层操作还是在flask中做的,socketio对其做了抽象。使用threading模式时并没有自己实现socket的链接而是复用了web框架的socket

WebSocket、Socket、TCP、HTTP区别

会有一股神秘感。 提交于 2020-03-08 14:33:28
1. 概述 WebSocket 是为了满足基于 Web 的日益增长的实时通信需求而产生的。在传统的 Web 中,要实现实时通信,通用的方式是采用 HTTP 协议不断发送请求。但这种方式即浪费带宽(HTTP HEAD 是比较大的),又消耗服务器 CPU 占用(没有信息也要接受请求)。(下图来自 WebSocket.org ) 而是用 WebSocket 技术,则会大幅降低上面提到的消耗:(下图来自 websocket.org ) 关于更详细的描述,尹立的这篇文章讲得非常好: WebSocket(2)–为什么引入WebSocket协议 。 那么,WebSocket 到底与 HTTP 协议到底是一个什么样的关系呢?它和 Socket 又有什么联系?这就要讲到 OSI 模型和 TCP/IP 协议族。 2. OSI 模型与 TCP/IP 以下是 维基百科 中关于OSI 模型的说明: 开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,ISO/IEC 7498-1),简称为OSI模型(OSI model),一种概念模型,由国际标准化组织(ISO)提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。 而 TCP/IP 协议可以看做是对 OSI 模型的一种简化(以下内容来自 维基百科 ):

高并发下的Node.js与负载均衡

亡梦爱人 提交于 2020-03-08 14:12:55
新兴的 Node.js 已经吸引了很多开发人员的眼光,它提供给我们一个快速构建高性能的网络应用的平台。我也开始逐步投入node.js的怀抱,在学习和使用的过程中,遇到了一些问题,也有一些经验,我觉得有必要写出来,作为总结,也用作分享。 众所周知,node.js基于 v8 引擎,所以它本身并不支持多线程(有多线程的 Module 哦),那么为了充分利用server的Multi-core,就必须使用多进程的方式。那么进程之间如何负载均衡就会是一个关键所在。 多进程共享监听socket Node.js与进程相关的模块有 process , child_process , cluster ,这其中cluster用于方便的创建共享端口的多进程模式(The cluster module allows you to easily create a network of processes that all share server ports),这种模式使多个进程间共享一个监听状态的socket,并由系统将accept的connection分配给不同的子进程,而且实现起来也非常简单,cluster为你做了大部分事情,这里有一个test case: 1 var cluster = require('cluster'); 2 var http = require('http'); 3 var

epoll与selector的简单理解

て烟熏妆下的殇ゞ 提交于 2020-03-08 13:46:59
概念理解 selector与epoll是多路复用的函数。我认为多路复用是针对bio而言,指的是通过单线程来追踪管理多个socket对象。传统的bio中,在socket的accept与read两个阶段都会造成阻塞,那么就无法处理并发问题,即仅一个socket对象就已经占用了IO对象,没有余力解决其他线程的请求。那么如何让bio能够处理并发问题呢?就是在accept和read阶段不再阻塞,当accept到socket对象的时候就将其缓存至list中,同时如果read到数据了就处理数据。但如果没有accept对象,则会去list中询问以前accept的对象有没有需要read的数据。如此,通过一个线程完成了多个socket对象的管理。那么selector与epoll就是完成了上述功能。 对比分析 selector内部维持了一个数据结构(bitmap),用来存储已经接受的socket对象。然后将此数据复制一份,交给内核去轮训每个socket对象是否有期待的事件发生,如果有就会进行置位(用户态到内核态的复制)。然后返回给用户态,由用户态完成事件的处理。 epoll针对selector进行了优化,采用红黑树来存储accept的socket对象,同时还维持着一个list,存放有发生的事件的socket以及事件,然后将此任务队列返回。用户态无需遍历所有的socket对象。下图即为epoll的说明图。

[内功修神]Java NIO

微笑、不失礼 提交于 2020-03-07 23:46:48
个人博客文章地址 文章目录 1. 浅析I/O模型 1.1. 什么是同步?什么是异步? 1.2. 什么是阻塞?什么是非阻塞? 1.3. 什么是阻塞IO?什么是非阻塞IO? 1.4. 什么是同步IO?什么是异步IO? 1.5. 五种IO模型 1.5.1. 阻塞IO模型(BIO) 1.5.2. 非阻塞IO模型 1.5.3. 多路复用IO模型(NIO) 1.5.4. 信号驱动IO模型 1.5.5. 异步IO模型 (Asynchronous IO --- AIO) 1.6. 两种高性能IO设计模式 1.6.1. 传统的网络服务设计模式中,有两种比较经典的模式 1.6.2. Reactor模式 1.6.3. Proactor模式 2. Java NIO之Buffer(缓冲区) 3. Java NIO之通道(Channel) 4. 选择器(Selector) 1. 浅析I/O模型 1.1. 什么是同步?什么是异步? 同步:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行 会导致整个流程的暂时等待 ,这些事件没有办法并发地执行; 异步:如果有多个任务或者事件发生,这些事件可以并发地执行,一个事件或者任务的执行 不会导致整个流程的暂时等待 。 1.2. 什么是阻塞?什么是非阻塞? 阻塞:当某个事件或者任务在执行过程中,它发出一个请求操作

Rabbitmq之Socket descriptors

拜拜、爱过 提交于 2020-03-07 19:02:39
rabbitmq最大连接数(Socket Descriptors), RabbitMQ的socket连接数(socket descriptors)是文件描述符(file descriptors,fd)的一个子集 。 也就是说, RabbitMQ能同时打开的最大连接数和最大文件句柄数(文件系统,管道)都是受限于操作系统关于文件描述符数量的设置,两者是此消彼长的关系。 初始时,可用socket描述符与可用fd数量的比率大概在0.8-0.9左右,这个值并不固定,当socket描述符有剩余时, RabbitMQ会使用尽量多的文件描述符用于磁盘文件读写。随着服务器建立越来越多的socket连接,文件句柄开始回收,数量减少。 总之,RabbitMQ会优先将文件描述符用于建立socket连接,宁可牺牲频繁打开/关闭文件带来的磁盘操作性能损耗, 这种取舍很容易理解,作为网络服务器,当然优先保障网络吞吐率了。因此,对于高并发连接数的多队列读写时,队列性能会稍微差那么一点,比如用RabbitMQ做RPC。 当服务器建立的socket连接已经达到限制(sockets_limit)时,服务器不再接受新连接。这里要区分清楚,RabbitMQ不再接收的是AMQP连接,而不是传输层的TCP连接, 参考链接: https://blog.csdn.net/huoyunshen88/article/details

python之socket编程(一)

元气小坏坏 提交于 2020-03-07 12:50:23
socket之前我们先来熟悉回忆几个知识点。 OSI七层模型 OSI(Open System Interconnection)参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。它是一个七层的、抽象的模型,不仅包括一系列抽象的术语或概念,也包括具体的协议。(from百度) TCP/IP四层参考模型 由于OSI七层较为庞大,所以由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。 以下图片TCP/IP四层与OSI七层的区别,是百度上找的图片,大家迁就看: 他们的对应网络协议如下: 今天我们说的socket就在传输层。 TCP/IP三次握手建立连接 TCP/IP四次挥手关闭连接 接着我们来看下在TCP/IP四层中数据之间的一些关系吧: TCP/IP解释 Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,定义了电子设备如何连入因特网,以及数据如何在它们之间 传输的标准。 python中socket编程 上面一balabala一堆废话,无非想引出来socket这个东西,那么这个socket是个什么鬼呢?socket是TCP/IP中传输层中TCP、UDP的实现方式,用socket编程,可以实现TCP UDP的通信

socket编程基础

断了今生、忘了曾经 提交于 2020-03-07 12:48:06
socket编程 什么是socket 定义 socket通常也称作 套接字 ,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过 套接字 向网络发出请求或者应答网络请求。 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭) socket和file的区别: file模块是针对某个指定文件进行【打开】【读写】【关闭】 socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】 python相关 Python 提供了两个基本的 socket 模块。py2位大写,py3全部小写 第一个是 Socket,它提供了标准的 BSD Sockets API。 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发 socket编程实现 流程图:  说明: 服务端 1.服务端需要导入socket模块,并创建套接字(实例化为一个对象) import socket s = socket.socket() 2.绑定套接字s到本地IP和端口 ip_port = ('127.0.0.1',8080) s.bind(ip_port) 3