Java分布式应用:Java分布式通讯方式

Java分布式应用:Java分布式通讯方式第一部分Java分布式通讯的方式1.基于消息方式实现系统间通讯a.数据传输部分:TCP/IP、UDP/IPTCP(端口号为23)与UDP(端口号为53)的区别1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证…

大家好,又见面了,我是你们的朋友全栈君。

第一部分 Java分布式通讯的方式

1.基于消息方式实现系统间通讯

a.数据传输部分 : TCP/IP 、UDP/IP
TCP(端口号为23)与UDP(端口号为53)的区别

  • TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
  • TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
  • TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
  • TCP首部开销20字节;UDP的首部开销小,只有8个字节
  • TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

总结:

  • TCP的优势在于其安全性
  • UDP的优势在于其性能

b.数据处理部分:BIO、NIO、AIO
同步阻塞BIO: 连接线程 (缓存、自己处理)
同步非阻塞NIO:请求线程(立即、自己处理)
异步非阻塞AIO:有效请求线程(立即、委托OS)

同步 vs 异步
同步:JAVA自己处理IO读写
异步: 将IO读写委托给OS(系统)

阻塞 (不立即返回) vs 非阻塞(立即返回)
阻塞:利用缓冲区先读写资源 ,再通知应用 相对而言响应速度慢
非阻塞: 线程在处理之前可能要等待后端资源, 响应速度快

总结:

  • NIO和AIO都是由事件驱动,要进行事件注册及扫描。
  • BIO的实现方式主要是通过Socket套接字的方式。
  • mysql数据库采用的就是BIO,而Netty采用的是NIO。

2基于远程调用方式实现系统间通讯

  1. RPC:采用C/S方式,跨语言跨平台
  2. webservice:请求应答机制,跨系统跨平台
  3. RMI: 降低客户端与服务器的耦合性,java远程接口调用;跨虚拟机
  4. JMS:JAVA消息服务,点对点和发布订阅模型 如ActiveMQ
    在这里插入图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133335.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 移动端开发绪论

    移动端开发绪论移动端开发基础通常移动端开发主流方案一共有两种一种是单独制作移动端页面,目前在市场上是主流方案还有一种是响应式页面兼容移动端这种虽然不是主流方案,但是应用这种开发方案的也不是没有.我们访问移动端页面可以通过以下两种方式进行访问:网址域名加m(mobile)就可以直接访问页面的移动端页面使用移动设备,进行访问,则可以直接跳转到移动端页面又到了我们最头疼的浏览器的兼容性问题移动端浏览器基本以webkit内核为主,因此我们只需要考虑webkit兼容性问题即可。移动端浏览器

    2022年6月24日
    27
  • CLion2022.01.13激活码(JetBrains全家桶)

    (CLion2022.01.13激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年4月1日
    101
  • js给数组添加数据的方式/js 向数组对象中添加属性和属性值[通俗易懂]

    js给数组添加数据的方式/js 向数组对象中添加属性和属性值[通俗易懂]参考:https://www.cnblogs.com/ayaa/p/14732349.htmljs给数组添加数据的方式有以下几种:直接利用数组下标赋值来增加(数组的下标起始值是0)例,先存在一个有3个数据的数组:letarr=[1,2,3];console.log(arr);  此时输出的结果是[1,2,3]letarr=[1,2,3];arr[3]=5;console.log(arr);  此时的输出结果是[1,2,3,5];通过数组名[数组名.le.

    2022年6月11日
    238
  • vmware linux安装_vm如何安装系统

    vmware linux安装_vm如何安装系统火眼发布Windows渗透工具包(CommandoVM)包含140个渗透工具工具下载地址:github.com/fireeye/commando-vmKaliLinux已成为攻击型安全专家的标配工具,但对需要原生Windows功能的渗透测试员来说,维护良好的类似工具集却是不存在的。安全服务公司火眼就是要改变这一现状。3月28日,该公司发布了一个包含超过140个开源Windows工具的…

    2022年10月1日
    1
  • codeforces Arrival of the General 题解

    codeforces Arrival of the General 题解

    2022年1月31日
    37
  • python for循环多个参数处理_python for循环嵌套

    python for循环多个参数处理_python for循环嵌套实际上,“使用for循环遍历数组的最简单方法”(Python类型被命名为“list”BTW)是第二种方法,即foriteminsomelist:do_something_with(item)哪个FWIW适用于所有iterable(列表、元组、集合、dict、迭代器、生成器等)。基于范围的C风格版本被认为是非常不通俗的,并且只适用于列表或类似列表的iterable。WhatIwouldl…

    2022年8月12日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号