Netty&WebSocket学习笔记

Netty

Netty是一个提供了易于使用的API的客户端/服务器框架。
是一个异步的事件驱动网络应用框架,可以迅速开发高性能的服务端客户端
并发高 - NIO(非阻塞IO)
传输快 - 零拷贝
提供了很多API,简化了网络编程

零拷贝

数据从IO读取放到内存堆会经过一些缓冲区,数据拷贝两次,数据很大时造成资源浪费
而Netty接受数据或传输数据时开辟一个新的堆内存,数据就从IO读到新的堆内存中,加快了传输的速率

提供协议

  • HTTP&WebSocket
  • Socket&Datagram
  • SSL . StartTLS

阻塞和非阻塞

线程访问资源,该资源是否准备就绪的一种处理方式
资源没有准备就绪
阻塞:线程会一直等待资源处理完毕,直到响应返回结果,线程处于阻塞不可以做任何事情
非阻塞:线程直接返回结果,不会持续等待资源处理完毕,会去请求别的资源

同步和异步

同步和异步是指访问数据的一种机制
同步:主动请求,并且等待IO操作完成后发送通知
异步:在一个线程中,主动请求数据后,可以去处理其他任务,可以发起其他请求,很多请求处理完毕之后,再逐一的通过异步的通知方式通知你

BIO

Block IO同步阻塞
IO在进行读写时,线程无法进行其他操作,并发处理能力低
服务器与客户端问一答方式,过程中频繁创建和销毁响应的线程

通过线程池改良,不再创建新的线程,也可以称之为伪异步IO

NIO

同步非阻塞IO,New IO(Non-Block IO)
通过Selector选择器,多路复用器,与多个客户端建立双向通道(Channel),进行数据读写到Block中。

AIO

异步非阻塞IO

异步阻塞IO

区别于同步,同步主动去请求,异步等待通知通知
在这里插入图片描述
在这里插入图片描述

Reactor线程模型

单线程模型:所有的IO操作都由同一个NIO线程处理的
多线程模型:由一组NIO线程处理IO操作
主从线程模型:一组线程池接受请求,一组线程池处理IO

Demo

在这里插入图片描述在这里插入图片描述在这里插入图片描述

Channel生命周期

在这里插入图片描述在这里插入图片描述

WebSocket

实时通讯方式

  • Ajax轮询
    通过ajax异步地,浏览器每隔一段时间发送一个请求到后端,询问服务器有无数据更新,如有将数据拿到前端进行渲染,一直循环获得后端的数据,浏览器不需要一直刷新。
  • Long pull
    请求是阻塞模式,客户端访问服务器后,如果服务器没有响应,一直等待直到服务器返回response为止,只有返回后,客户端才会再次建立请求
  • WebSocket
    是基于Http的一种协议,(Http1.0不支持长连接),使用http协议完成一小部分握手,客户端发起请求到服务端,服务端找到对应的服务助理,服务助理与客户端一直保持链接,为客户端进行服务,并且可主动推送新的消息到客户端。

相对于Http协议这种非持久化的协议来说是一种持久化协议,Http协议request和response一一对应,服务器需要接收到客户端的request后才发送response给客户端。

而websocket一旦建立连接之后,服务端可以主动地一直推送消息给客户端,客户端不需要请求服务端。只需要建立一次http请求,就可以做到源源不断的信息的传递。

Demo

WebSocket API

连接后端

var socket = new WebSocket("ws://[ip]:[port]");

WebSocket前端的生命周期

  • onopen()
    客户端和服务端连接建立触发
  • onmessage()
    收到消息触发,服务端向客户端发送消息,只要发送消息就会在客户端的onmessage()里面接收
  • onerror
    后端出现异常,在后端主动关闭了服务器,在前端的onerror会接收到相应的错误事件
  • onclose
    客户端和服务端连接关闭触发

主动方法

  • Socket.send() Socket.close()

FastDFS文件服务器

在这里插入图片描述
在这里插入图片描述
Linux下安装ssh,将下列文件通过filezilla传入linux中
在这里插入图片描述
配置tracker,storage,client
在这里插入图片描述
在这里插入图片描述
文件上传目录

在这里插入图片描述在这里插入图片描述

安装gcc++,pcre,zlib和zlib-devel,ssl-devel

$ sudo apt-get install zlib1g
$ sudo apt-get install zlib1g.dev

$ sudo apt-get install apache2 ##安装Apache
$ sudo apt-get install openssl ##安装openssl
$ sudo apt-get install libssl-dev ##安装openssl开发库

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值