![](https://img-blog.csdnimg.cn/20200725225607580.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
网络编程
文章平均质量分 94
Nio,Bio,Netty
迷雾总会解
我来,我见,我征服!
展开
-
基于 Go 的轻量级并发TCP服务器框架zinx的实现&游戏开发
文章目录引言zinx项目结构serverconnectionmsgHandlerroutermessagerequestconnmanagerdatapackglobalobj服务器创建客户端创建流程分析MMO游戏介绍玩家的上线世界聊天系统多人位置同步移动位置同步玩家下线项目结构mainaoigridplayerworldmanagerroutermoveworld_chatmsg.proto引言在该项目中有两个部分,一个是zinx,一个是mmo_game,zinx是一个tpc框架,而mmo_game是原创 2022-04-15 10:54:08 · 7996 阅读 · 0 评论 -
python网络编程 -05- UDP(并与TCP进行一个比较)
UDP服务端import socketserver = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server.bind(("127.0.0.1", 50000))while True: data, addr = server.recvfrom(1024) print(f"接收到{addr}的数据:{data.decode()}") server.sendto(data.decode().upper().encode原创 2020-08-10 23:37:32 · 123 阅读 · 0 评论 -
python网络编程 -04- 传送文件(进度条的使用)
收发收发文件与远程执行命令的程序原理是一摸一样的,比如下载文件的过程:服务端import socketimport osserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.bind(("127.0.0.1", 50000))server.listen(2)count = 0while True: conn, client_addr = server.accept() count += 1 .原创 2020-08-10 23:35:50 · 441 阅读 · 0 评论 -
python网络编程 -03- 搭建一个简单的ssh(解决粘包问题)
服务端import socketimport subprocess # 使用指令import jsonserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.bind(("127.0.0.1", 50000))server.listen(2)count = 0while True: conn, client_addr = server.accept() count+=1 print(f"[原创 2020-08-10 23:34:29 · 209 阅读 · 0 评论 -
python网络编程 -02- 基础搭建和循环发送数据
建立基础服务端和客户端服务端import sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind(("127.0.0.1", 50000))s.listen(2) # 允许挂起多少个连接client_conn, client_addr = s.accept()print(client_conn, client_addr)client_conn.send("大爷,您竟来了!!!".encode())data =原创 2020-08-10 23:32:47 · 319 阅读 · 0 评论 -
python网络编程 -01- socket介绍和简单函数
引子 我们已经知道,假设我现在要写一个程序,给另一台计算机发数据,必须通过tcp/ip协议 ,但具体的实现过程是什么呢?我应该怎么操作才能把数据封装成tcp/ip的包,又执行什么指令才能把数据发到对端机器上呢? 不能只有世界观,没有方法论呀。。。此时,socket隆重登场,简而言之,socket这个东东干的事情,就是帮你把tcp/ip协议层的各种数据封装啦、数据发送、接收等通过代码已经给你封装好了,你只需要调用几行代码,就可以给别的机器发消息了。Socket介绍什么是socket? Socket是应原创 2020-08-09 20:14:52 · 222 阅读 · 0 评论 -
Netty -12- 用 Netty自己实现 RPC
RPC 基本介绍RPC(Remote Procedure Call)— 远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程两个或多个应用程序都分布在不同的服务器上,它们之间的调用都像是本地方法调用一样(如图)常见的 RPC 框架有: 比较知名的如阿里的Dubbo、google的gRPC、Go语言的rpcx、Apache的thrift,Spring 旗下的 Spring CloudRPC 调用流程图原创 2020-07-25 23:20:49 · 160 阅读 · 0 评论 -
Netty -12- 任务加入异步线程池
介绍在 Netty 中做耗时的,不可预料的操作,比如数据库,网络请求,会严重影响 Netty 对 Socket 的处理速度。而解决方法就是将耗时任务添加到异步线程池中。但就添加线程池这步操作来讲,可以有2种方式,而且这2种方式实现的区别也蛮大的。处理耗时业务的第一种方式—handler 中加入线程池处理耗时业务的第二种方式—Context 中添加线程池当我们使用addLast方法添加线程池后,handler将优先使用这个线程池,如果不添加,将使用IO线程 流程方式一se.原创 2020-07-25 23:18:15 · 835 阅读 · 0 评论 -
Netty -11- TCP 粘包和拆包及解决方案
TCP 粘包和拆包基本介绍TCP 是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的 socket, 因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle 算法),将多次间隔 较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,**但是接收端就难于分辨出完整的数据包了,因为面向流的通信是无消息保护边界的 **由于 TCP 无消息保护边界, 需要在接收端处理消息边界问题,也就是我们所说的粘包、拆包问题,原创 2020-07-25 23:16:09 · 138 阅读 · 0 评论 -
Netty -10- 整合log4j
整合log4j引入依赖<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version></dependency><dependency> <groupId>org.slf4j</groupId> <ar原创 2020-07-25 23:14:26 · 295 阅读 · 0 评论 -
Netty -09- Netty 编解码器和 handler 的调用机制
基本说明netty 的组件设计:Netty 的主要组件有 Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipe 等ChannelHandler 充当了处理入站和出站数据的应用程序逻辑的容器。例如,实现 ChannelInboundHandler 接口(或 ChannelInboundHandlerAdapter),你就可以接收入站事件和数据,这些数据会被业务逻辑处理。当要给客户端 发送 响 应 时 , 也 可 以 从 ChannelInb原创 2020-07-25 23:13:25 · 261 阅读 · 0 评论 -
Netty -08- Google Protobuf
编码和解码的基本介绍编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据 时就需要解码codec(编解码器) 的组成部分有两个:decoder(解码器)和 encoder(编码器)。encoder 负责把业务数据转换成字节 码数据,decoder 负责把字节码数据转换成业务数据Netty 本身的编码解码的机制和问题分析Netty 自身提供了一些 codec(编解码器)Netty 提供的编码器StringEncoder,对字符串数据进原创 2020-07-25 23:11:11 · 181 阅读 · 0 评论 -
Netty -07- Netty 核心模块组件
Bootstrap、ServerBootstrapBootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联 各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类常见的方法有public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup)该方原创 2020-07-25 23:09:35 · 132 阅读 · 0 评论 -
Netty -06- Netty 高性能架构设计
线程模型基本介绍 不同的线程模式,对程序的性能有很大影响,为了搞清 Netty 线程模式,我们来系统的讲解下 各个线程模式, 最后看看 Netty 线程模型有什么优越性. 目前存在的线程模型有:传统阻塞 I/O 服务模型Reactor 模式 根据 Reactor 的数量和处理资源池线程的数量不同,有 3 种典型的实现单 Reactor 单线程单 Reactor 多线程主从 Reactor 多线程 Netty 线程模式(Netty 主要基于主从 Reactor 多线程模型做了一定的改原创 2020-07-25 23:07:12 · 172 阅读 · 0 评论 -
Netty -05- Netty介绍
概述Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。Netty 主要针对在 TCP 协议下,面向 Clients 端的高并发应用,或者 Peer-to-Peer 场景下的大量数据持续传输的应用。Netty 本质是一个 NIO 框架,适用于服务器通讯相关的多种应用场景要透彻理解 Netty , 需要先学习 NIO , 这样我们才原创 2020-07-25 23:03:56 · 110 阅读 · 0 评论 -
Netty -04- NIO的拷贝和零拷贝
零拷贝的基本介绍零拷贝是网络编程的关键,很多性能优化都离不开。Java中的零拷贝说的是只是用户态的零拷贝,不是操作系统层面的零拷贝 (CPU拷贝)在 Java 程序中,常用的零拷贝有 mmap(内存映射) 和 sendFile。那么,他们在 OS 里,到底是怎么样的一个的设计?我们分析 mmap 和 sendFile 这两个零拷贝另外我们看下 NIO 中如何使用零拷贝传统 IO 数据读写 Java 传统 IO 和 网络编程的一段代码 传统 IO 模型这是一个从磁原创 2020-07-25 23:02:49 · 431 阅读 · 0 评论 -
Netty -03- NIO
???? NIO学习记录原创 2020-07-25 23:00:27 · 111 阅读 · 0 评论 -
Netty -02- BIO
基本介绍Java BIO 就是传统的 java io 编程,其相关的类和接口在 java.ioBIO(blocking I/O) : 同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需 要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实 现多个客户连接服务器)。BIO 方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4 以前的唯一选择,程序简单易理解工作机制原创 2020-07-25 22:59:17 · 79 阅读 · 0 评论 -
Netty -01- IO模型
基本说明I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能Java 共支持 3 种网络编程模型/IO 模式:BIO、NIO、AIOJava BIO : 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销Java NIO : 同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上原创 2020-07-25 22:57:05 · 120 阅读 · 0 评论 -
NIO的学习记录(缓冲区,通道,分散和聚集,编码和解码,阻塞和非阻塞,管道)
介绍基本介绍 Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。Nio和io的区别IONIO面向流(Stream Oriented)面向缓冲区(Buffer Oriented)阻塞IO(Blocking IO)非阻塞IO(Non Blocking原创 2020-07-22 11:03:07 · 238 阅读 · 0 评论