网络编程 -- RPC实现原理 -- 目录 啦啦啦 V1——RPC -- 本地方法调用:不通过网络 入门 1. RPCObjectProxy rpcObjectProxy = new RPCObjectProxy(new LocalRPCClient()); : 绑定目标对象 2. IUserService userService = (IUserService) rpcObjectProxy.create(IUserService.class); :返回代理类 3. List<User> u…
网络编程 -- RPC实现原理 -- 目录 啦啦啦 V2——RPC -- 本地方法调用 + Spring 1. 配置applicationContext.xml文件 注入 bean 及 管理 bean 之间的依赖关系 2. RPCObjectProxy 类 实现 FactoryBean<Object> 接口,通过 public Object getObject() throws Exception 返回代理类 3. List<User> users = userService.qu…
网络编程 -- RPC实现原理 -- 目录 啦啦啦 V1——Netty入门应用 Class : NIOServerBootStrap package lime.pri.limeNio.netty.netty01.server; import java.net.InetSocketAddress; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.cha…
网络编程 -- RPC实现原理 -- 目录 啦啦啦 V2——Netty -- 使用序列化和反序列化在网络上传输对象:需要实现 java.io.Serializable 接口 只能传输( ByteBuf, FileRegion )两种类型,因此必须将对象在发送之前进行序列化,放进ByteBuf中,客户端接收到ByteBuf时,将字节码取出,反序列化成对象. Class : Server package lime.pri.limeNio.netty.netty02.exercise; import…
网络编程 -- RPC实现原理 -- 目录 啦啦啦 V2——Netty -- pipeline.addLast(io.netty.handler.codec.MessageToMessageCodec<INBOUND_IN, OUTBOUND_IN>) 覆写编码解码方法. pipeline相当于拦截器.在pipeline中添加MessageToMessageCodec接口的实现类,该接口的实现类中的encode()方法自动将发送的Object对象转换为ByteBuf,decode()方法自动将…
网络编程 -- RPC实现原理 -- 目录 啦啦啦 V2——Netty -- new LengthFieldPrepender(2) : 设置数据包 2 字节的特征码 new LengthFieldBasedFrameDecoder(65535, 0, 2, 0, 2) :  65535 :数据包长度.0:分隔符偏移值.2:分隔符长度.0:数据包偏移值.2:数据包长度. Class : Server package lime.pri.limeNio.netty.netty04; import j…
网络编程 -- RPC实现原理 -- 目录 啦啦啦 V1——设置标识变量selectionKey.attach(true);只处理一次(会一直循环遍历selectionKeys,占用CPU资源). (由于key没有清除,依旧在selectionKeys中存在,遍历时依旧会检测到对应事件,除非socket关闭或调用selectionKey.cancel();清除对应事件) Class : Service package lime.pri.limeNio.optimize.socket2; impo…
网络编程 -- RPC实现原理 -- 目录 啦啦啦 V3——RPC -- 远程方法调用 及 null的传输 + Spring 服务提供商: 1. 配置 rpc03_server.xml 注入 服务提供商 rpcServiceProvider并指定初始化方法 及 服务实例 IUserService 2. 读取 服务消费者 请求的 MethodStaics ,通过反射获取服务端实例方法的返回值.返回值为null值,则映射为NullWritable实例返回.不为null,则不加以约束. 服务代理商:…
网络编程 -- RPC实现原理 -- 目录 啦啦啦 V4——RPC -- 远程方法调用 + Spring 自动注册 服务提供商: 1. 配置 rpc04_server.xml 注入 服务提供商 rpcServiceProvider并指定初始化方法.销毁方法 及 服务实例 IUserService 2. 读取 服务消费者 请求的 MethodStaics ,通过反射获取服务端实例方法的返回值.返回值为null值,则映射为NullWritable实例返回.不为null,则不加以约束. 服务消费者:…
前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信   TCP UDP 协议名称 传输控制协议 用户数据包协议 是否连接 面向连接的协议.数据必须要建立连接 无连接的协议,每个数据报中都给出完整的地址信息,因此不需要事先建立发送方和接受方的连接 是否可靠 可靠协议.确保收方完全地获取发送方所发送的全部数据 不可靠协议.发送方所发送的数据报并不一定以相同的次序到达接收方. 可以传输的数据大小 传输数据大小不受限制…
一  tcp网络编程 server 端 import socket sk=socket.socket() #实例化一个对象 sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)#端口可以重用 sk.bind(('127.0.0.1',9100)) sk.listen()#监听 while True: conn,addr=sk.accept() #阻塞,三次握手完毕 while True: inp=input('请输入你要发送的消息:') c…
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下: 1.网络中进程之间如何通信? 2.Socket是什么? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 3.3.listen().co…
-- 啦啦啦 -- 网络编程 -- RPC实现原理 -- NIO单线程 网络编程 -- RPC实现原理 -- NIO多线程 -- 迭代版本V1 网络编程 -- RPC实现原理 -- NIO多线程 -- 迭代版本V2 网络编程 -- RPC实现原理 -- Netty -- 迭代版本V1 -- 入门应用 网络编程 -- RPC实现原理 -- Netty -- 迭代版本V2 -- 对象传输 网络编程 -- RPC实现原理 -- Netty -- 迭代版本V3 -- 编码解码 网络编程 -- RPC实现…
RPC简介 本地过程调用 // 正常情况下程序的执行和调用情况.例如有如下go语言代码: package main import "fmt" func main() { var a,b int a = 1 b = 2 c := Add(a,b) fmt.Println("计算结果",c) } func Add(a int,b int) int{ return a+b } 在上述的Go语言代码中,我们定义了一个Add方法用于实现两个数相加的功能,在main方法中通过调…
什么是 RPCRPC(Remote Procedure Call Protocol)远程过程调用协议.通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算上的某个过程或函数,就像调用本地应用程序中的一样. 正式的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. RPC 主要特质: RPC 是协议:协议意味着规范.目前典型的 RPC 实现包括Hetty 等.但这些实现往往都会附加其他重要功能,例如 Du理.访问权限管理等功能. 网络协议和网络 IO 模型…
Netty什么? Netty项目是一个提供异步事件驱动网络应用框架和快速开发可维护的高性能高扩展性服务端和客户端协议工具集的成果.换句话说,Netty是一个NIO客户端服务端框架,它使得快速而简单的开发像服务端客户端协议的网络应用成为了可能.它它极大的简化并流线化了如TCP和UDP套接字服务器开发的网络编程."快速且简便"不意味着目标应用将容忍维护性和性能上的问题.Netty在吸取了大量协议实现(如FTP,SMTP,HTTP以及各种二进制,基于文本的传统协议)的经验上进行了精心的设计.…
1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机网络编程的基础,TCP/UDP收发消息都靠它.我们熟悉的web服务器底层依赖它,我们用到的MySQL关系数据库.Redis内存数据库底层依赖它.我们用微信和别人聊天也依赖它,我们玩网络游戏时依赖它,读者们能够阅读这篇文章也是因为有它在背后默默地支持着网络通信. 本篇文章依然尝试使用动画图片的方式,来对这个知识…
.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方式,来对这个知识点进行“脑残式”讲解(哈哈),期望读者们可以更加简单.直观地理解TCP网络通信交互的本质. 另外,社区里的另两篇文章<理论经典:TCP协议的3次握手与4次挥手过程详解>.<理论联系实际:Wireshark抓包分析TCP 3次握手.4次挥手过程>也是不错的入门文章,有兴趣…
脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?     http://www.52im.net/thread-1732-1-1.html   1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机网络编程的基础,TCP/UDP收发消息都靠它.我们熟悉的web服务器底层依赖它,我们用到的MySQL关系数据库.Redis内存数据库底层依赖它.我…
脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手   http://www.52im.net/thread-1729-1-1.html     1.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方式,来对这个知识点进行“脑残式”讲解(哈哈),期望读者们可以更加简单.直观地理解TCP网络通信交互的本质. 另外,社区里的另两篇文章<理论经…
本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不能理解Web短连接(就是最常见的HTTP通信了)跟长连接(主要指TCP.UDP协议实现的socket通信,当然HTML5里的Websocket协议也是长连接)的区别,导致写即时通讯这类系统代码时往往找不到最佳实践,搞的一脸蒙逼. 本篇我们先简单了解一下 TCP/IP,然后通过实现一个 echo 服务…
本文引用了自简书作者“涤生_Woo”的文章,内容有删减,感谢原作者的分享. 1.前言 HTTP(全称超文本传输协议,英文全称HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法. 对于移动端即时通讯(尤其IM应用)来说,现今主流的数据通信总结下来无外乎就是长连接+短连接的方式,而短连接在应用上讲就是本文将要介绍的HTTP协议的应用,而而正确地理解HTTP协…
返回目录 本篇索引 (1)基本原理 (2)socket模块 (3)select模块 (4)asyncore模块 (5)asynchat模块 (6)socketserver模块 (1)基本原理 本篇指的网络编程,仅仅是指如何在两台或多台计算机之间,通过网络收发数据包:而不涉及具体的应用层功能(如Web服务器. 邮件收发.网络爬虫等等),那些属于应用编程的范畴,需要了解的可参看下一篇 Internet 应用编程. 关于使用Python进行网络通信编程,简单的例子网络上一搜一大把,但基本都是仅仅几行最…
目录 一.异常处理 1 什么是异常 2 为什么要处理异常 3 如何处理异常 3.1 语法错误 3.2 逻辑错误 3.3 两种处理逻辑异常的方式 3.3.1 可预知型错误 3.3.2 不可预知型错误 4 制造异常 二.网络编程 1 网络通信原理 2 osi七层协议 2.1 物理层 2.2 数据链路层 2.3 网络层 一.异常处理 1 什么是异常 异常是程序发生错误的信号,程序一旦出错就会抛出异常,程序就会终止运行 异常的三个特征: 异常的追踪信息 异常的类型 异常的内容 而错误分成两种 一种是语法…
Linux网络编程API函数初步剖析 今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作. 1.socket(family,type,protocol) 当我们在开发网络应用程序时,使用该系统调用来创建一个套接字.该API所做的工作如下所示: 该系统调用主要完成两个任务:"创建套接字"和"为套接字绑定文件句柄". socket{}<include/linux/net.h>结构…
26.01_网络编程(网络编程概述)(了解) A:计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. B:网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换. 26.02_网络编程(网络编程三要素之IP概述)(掌握) 每个设备在网络中的唯一标识 每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址. ipconfig…
26.01_网络编程(网络编程概述) A:计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. B:网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换. 26.02_网络编程(网络编程三要素之IP概述) 每个设备在网络中的唯一标识 每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址. ipconfig:查看本机IP1…
本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢?另外,内行都知道,提到外网IP和内网IP就不得不提NAT路由转换这种东西,那这双是什么鬼?本文就来简单讲讲这些到底都是怎么回事.   另外,以下是与本文内相关知识点有关联的文章,可详细阅读之: <P2P 技术详解(一):NAT详解——详细原理.P2P简介> <P2P 技术详解(二):P2P…
1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步发布于:http://www.52im.net/thread-2067-1-1.html) 2.关于作者   翟志军,个人博客地址:https://showme.codes/,Github:https://github.com/zacker330.感谢作者的原创分享. 作者的另一篇<即时通讯安全篇(…
原文地址:http://blog.163.com/net_worm/blog/static/127702419201002842553382/ 首先对Windows下的网络编程总结一下: 如果是服务器,其WinSDK调用分别为: 1 WSAStartup() -> socket() -> htons() / htonl() -> bind() -> listen() -> accept() -> recv() / send() -> closesocket() -…