通信原理

Java Socket 编程原理及教程

你离开我真会死。 提交于 2019-12-03 10:10:51
对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。 对于Socket之间的通信其实很简单,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。下面来看一些服务端与客户端通信的例子: 1、客户端写服务端读 服务端代码 public class Server { public static void main(String args[]) throws IOException { //为了简单起见,所有的异常信息都往外抛 int port = 8899; //定义一个ServerSocket监听在端口8899上 ServerSocket server = new ServerSocket(port); /

分布式消息通信ActiveMQ原理-发送策略-笔记

百般思念 提交于 2019-12-02 22:02:49
持久化消息和非持久化消息的发送策略 消息同步发送和异步发送 ActiveMQ支持同步、异步两种发送模式将消息发送到broker上。 同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消息,表示消息已经被broker处理。 这个机制提供了消息的安全性保障 ,但是由于是阻塞的操作,会影响到客户端消息发送的性能 异步发送的过程中,发送者不需要等待broker提供反馈,所以性能相对较高。但是可能会出现消息丢失的情况。 所以使用异步发送的前提是在某些情况下 允许出现数据丢失 的情况。 默认情况下,非持久化消息是异步发送的,持久化消息并且是在非事务模式下是同步发送的。 但是在开启事务的情况下,消息都是异步发送。由于异步发送的效率会比同步发送性能更高。 所以在 发送持久化消息的时候,尽量去开启事务会话。 除了持久化消息和非持久化消息的同步和异步特性以外,我们还可以通过以下几种方式来设置异步发送 ConnectionFactory connectionFactory= new ActiveMQConnectionFactory("tcp://192.168.11.153:61616?jms.useAsyncSend=true"); ((ActiveMQConnectionFactory) connectionFactory).setUseAsyncSend(true); (

Socket通信原理(2)

泄露秘密 提交于 2019-12-02 14:44:43
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页 时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是 socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下: 文章目录 一、网络中进程之间如何通信? 二、什么是Socket? 三、socket的基本操作 (一)socket()函数 (二)bind()函数 (三)listen()、connect()函数 (四)accept()函数 (五)read()、write()等函数 (六)close()函数 四、socket中TCP的三次握手建立连接详解 五、socket中TCP的四次握手释放连接详解 六、下面给出实现的一个实例 一、网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道、FIFO、消息队列) 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程

Socket通信原理(1)

大兔子大兔子 提交于 2019-12-02 14:33:05
对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问: 什么是TCP/IP、UDP? Socket在哪里呢? Socket是什么呢? 你会使用它们吗? 什么是TCP/IP、UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。 UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。 这里有一张图,表明了这些协议的关系。 TCP/IP协议族包括运输层、网络层、链路层。现在你知道TCP/IP与UDP的关系了吧。 Socket在哪里呢? 在图1中,我们没有看到Socket的影子,那么它到底在哪里呢?还是用图来说话,一目了然。 原来Socket在这里。 Socket是什么呢? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 你会使用它们吗? 前人已经给我们做了好多的事了,网络间的通信也就简单了许多

共享内存和消息队列原理详解

余生颓废 提交于 2019-12-01 16:06:33
操作系统内的并发执行进程可以是独立的也可以是协作的: 如果一个进程不能影响其他进程或受其他进程影响,那么该进程是独立的,换句话说,不与任何其他进程共享数据的进程是独立的; 如果一个进程能影响其他进程或受其他进程所影响,那么该进程是协作的。换句话说,与其他进程共享数据的进程为协作进程。 提供环境允许进程协作,具有许多理由: 信息共享:由于多个用户可能对同样的信息感兴趣(例如共享文件),所以应提供环境以允许并发访问这些信息。 计算加速:如果希望一个特定任务快速运行,那么应将它分成子任务,而每个子任务可以与其他子任务一起并行执行。注意,如果要实现这样的加速,那么计算机需要有多个处理核。 模块化:可能需要按模块化方式构造系统,即将系统功能分成独立的进程或线程。 方便:即使单个用户也可能同时执行许多任务。例如,用户可以并行地编辑、收听音乐、编译。 协作进程需要有一种 进程间通信机制(简称 IPC) ,以允许进程相互交换数据与信息。进程间通信有两种基本模型:共享内存和消息传递(消息队列): 共享内存模型会建立起一块供协作进程共享的内存区域,进程通过向此共享区域读出或写入数据来交换信息。 消息传递模型通过在协作进程间交换消息来实现通信。 图 1 给出了这两种模型的对比。 图 1 通信模型   上述两种模型在操作系统中都常见,而且许多系统也实现了这两种模型。消息传递对于交换较少数量的数据很有用

网络原理

青春壹個敷衍的年華 提交于 2019-12-01 09:48:23
写在前边 很多家公司(无论是小厂还是大厂)问到的深度不同,网络原理是面试最容易问到的问题,虽然我们在项目中很少去实践它,但是了解其原理,会让我们背后网络通信是如果工作的,既能在面试官面前体现出你的基础是否扎实,也能对以后深入网络这部分学习有更多的了解。 很多同学面试在准备这部分的时候,都会去背,这部分确实很难掌握,我个人总结的最好的学习网络原理的方法就是不用刻意的去记忆而是完全的结合实际去讲整个原理融会贯通。虽然一开始学习起来很吃力,但是稍微用点心,多看几遍,多问自己为什么,把自己当做是开发网络原理的开发者,面试前的准备只要理清逻辑就足够了,而不是去背这部分内容。 而且这部分相同的知识点面试官有多种提问方式,但是其中很多都是换汤不换药。我记得最多的问的是输入URL,到页面呈现出来,其中经历了什么?这道面试题的背后,涉及到了很多网络原理的知识,我们这篇文章不会全部分享到,而是先把由来和网络层次划分弄清楚,就完成了这篇文章的目的。 一、为什么要进行网络层次划分? 说到网络层次划分并不陌生,我刚刚接触到网络层次的时候一脸懵逼,这么多层,一层不就行了嘛?层与层之间好多协议,还有各种数据包,第一次我放弃了。 当我从新拾起网络层次的时候,我下定决心从根上理解它。首先弄明白它的原理,那必定要知道它的由来,也就是为什么要进行网络层次划分?这个问题问的好。 假如“小鹿”是网络的开发人员

从0开始学架构

▼魔方 西西 提交于 2019-11-30 19:43:43
微服务架构实战160讲 其它学习课程目录: 从0开始学微服务 面试官绝杀:系统是如何支撑高并发的? 分布式技术原理与算法解析 消息队列高手课 从0开始学架构 微服务 一种架构模式,提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(RESTful API)。每个服务都围绕着具体的业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。 结构图: 来源: https://www.cnblogs.com/it-chen/p/11637928.html

RPC原理及实现

岁酱吖の 提交于 2019-11-29 23:42:01
#0 系列目录# 聊聊远程通信 Java远程通讯技术及原理分析 聊聊Socket、TCP/IP、HTTP、FTP及网络编程 RMI原理及实现 RPC原理及实现 轻量级分布式 RPC 框架 使用 RMI + ZooKeeper 实现远程调用框架 深入浅出SOA思想 微服务、SOA 和 API对比与分析 聊聊同步、异步、阻塞与非阻塞 聊聊Linux 五种IO模型 聊聊IO多路复用之select、poll、epoll详解 聊聊C10K问题及解决方案 #1 简介# RPC 的主要功能 目标是让构建分布式计算(应用)更容易 ,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制让使用者 不必显式的区分本地调用和远程调用 。 #2 调用分类# RPC 调用分以下两种: 同步调用 客户方等待调用执行完成并返回结果。 异步调用 客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。 若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。 异步和同步的区分在于是否等待服务端执行完成并返回结果 。 #3 结构拆解# RPC 服务方通过 RpcServer 去导出(export)远程接口方法 ,而 客户方通过 RpcClient 去引入(import)远程接口方法 。 客户方像调用本地方法一样去调用远程接口方法,

1.http 协议和 https 协议的原理

心已入冬 提交于 2019-11-29 14:18:53
首先,我们得知道应用层是 OSI 七层网络模型的第七层,不同类型的网络应用有不同的通信 规则,因此应用层协议是多种多样的,比如 DNS、FTP、Telnet、SMTP、HTTP、 等协议都 是用于解决其各自的一类问题。 http 通信协议的基本原理 http 协议在远程通信场景中的应用还是挺广泛的,包括现在主流的微服务架构的通信都是基 于 http 协议。由于经常使用的关系,所以大家对 http 协议的理解还是比较深刻,我这里就直 接帮大家梳理一下 http 协议的基本原理。 一次 HTTP 请求的通信流程 我们先来思考一个问题,我们在浏览器上输入一个网址后,浏览器是如何展示目标网址的内 容的?内容是从哪里来的呢? 来通过图形把这个过程画一下 DNS: (Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名 到 IP 地址之间的解析服务, 用户通常使用主机名或域名来访问对方的计算机,而不是直接通 过 IP 地址访问。因为与 IP 地址的一组纯数字相比,用字母配合数字的表示形式来指定计算 机名更符合人类的记忆习惯。 但要让计算机去理解名称,相对而言就变得困难了。因为计算机更擅长处理一长串数字。为 了解决上述的问题,DNS 服务应运而生。DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务 HTTP 通信协议的组成

从源码说swoole进程间通信原理

帅比萌擦擦* 提交于 2019-11-28 09:56:55
本文件假设你有c++和多进程编程的基础知识。 swoole进程间通信可以使用套接字(swoole_process::write/ swoole_process::read),也可以使用消息队列(push/pop)。本文的只讲述套接字通信部分。 本文使用的swoole源码为1.9版本 1. swoole_process中的__construct和start究竟做了什么 为了说明swoole进程间是如何使用unix socket进行通信的,我们先从源码入手,看看__construct和start函数究竟做了些什么。对于源码,我们只选取和本问题相关的部分进行解读。 1.1 __construct swoole_process.c static PHP_METHOD(swoole_process, __construct) { /*pipe_type即是__constrct的第三参数$create_pipe, 默认为2*/ long pipe_type = 2; if (pipe_type > 0) { swPipe *_pipe = emalloc(sizeof(swWorker)); int socket_type = pipe_type == 1 ? SOCK_STREAM : ,SOCK_DGRAM; /*创建pipe, 本质是套接字*/ if (swPipeUnsock