当前位置: 首页 > news >正文

资海集团网站建设网络营销课程总结1000字

资海集团网站建设,网络营销课程总结1000字,wordpress博客内容预览,长尾词挖掘作者简介#xff1a;☕️大家好#xff0c;我是Aomsir#xff0c;一个爱折腾的开发者#xff01; 个人主页#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏#xff1a;Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言基础扫… 作者简介☕️大家好我是Aomsir一个爱折腾的开发者 个人主页Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言基础扫盲问题所在 调整非阻塞技巧总结 参考文献 孙哥suns说NettyNetty官方文档 前言 在前面的文章中我们详细学习并使用了NIO中的Channel和Buffer。然而我们的示例中Channel的两端都是文件我们一直使用的是FileChannel没有与网络通信结合起来。从今天开始我们将进入网络编程领域使用NIO中的SocketChannel和ServerSocketChannel为后续的Netty学习打下坚实的基础。 基础扫盲 由于我们现在的开发都是使用的SpringBoot底层的网络通信都被Tomcat、Jetty等所处理我们很少能够接触Socket套接字编程这一个段落就来个基础性知识的扫盲。我们的客户端与服务端之间是使用Socket进行通信的Socket是计算机网络中的传输层的内容和TCP与UDP挂钩。在服务端有一个东西叫做ServerSocket它是用来接收客户端请求然后和客户端建立Socket连接的。下面的演示案例中我写了一个服务端和客户端的案例。 服务端就是创建ServerSocketChannel绑定端口启动监听请求获取对应的SocketChannel 客户端就是去连接服务端所在机器的对应端口发送数据相应数据即可 注意: 服务端有两次阻塞第一次阻塞是接收请求的时候第二次阻塞是建立后连接等待接收数据的时候。说明NIO是有阻塞的后面会写案例解决阻塞的端口是应用进程启动后在传输层给其分配的客户端是一个进程服务端是一个进程。有了端口号两个进程就可以跨进程互相访问当服务端启动就是一个主线程接收请求和数据处理都是由主线程挨个处理只要SocketChannel一经建立服务端或者客户端不主动销毁就会一直在但其中会不会有数据是两码子事 public class MyServer {public static void main(String[] args) throws Exception{// 1、创建ServerSocketChannelServerSocketChannel serverSocketChannel ServerSocketChannel.open();// 2、设置服务端的监听端口serverSocketChannel.bind(new InetSocketAddress(8000));ListSocketChannel channelList new ArrayList();ByteBuffer buffer ByteBuffer.allocate(20);// 3、接受客户端的连接,让它一直转(我们不知道啥时候会接收到请求)while (true) {// 4、SocketChannel代表服务端与Client链接的一个通道System.out.println(等待连接服务器...);// 发生阻塞,服务端在等待客户端的请求接收到才会放行SocketChannel socketChannel serverSocketChannel.accept();System.out.println(服务器已连接... socketChannel);// 4-1、接受一个客户端就存一个channelList.add(socketChannel);// 5、client与服务端 通信 NIOfor (SocketChannel channel : channelList) {System.out.println(开始实际的数据通信...);// 此处阻塞,对于的IO通信的阻塞,将channel中的数据读取到buffer中channel.read(buffer);// 开启读模式buffer.flip();CharBuffer result StandardCharsets.UTF_8.decode(buffer);System.out.println(result result);// 读完后开启写模式buffer.clear();System.out.println(实际的通信已经结束...);}}} }public class MyClient {public static void main(String[] args) throws Exception{// 1、创建客户端channel,并连接8000端口服务端SocketChannel socketChannel SocketChannel.open();socketChannel.connect(new InetSocketAddress(8000));// 2、向服务端发送数据socketChannel.write(Charset.defaultCharset().encode(你好我是Aomsir\n));System.out.println(-------------------------------------);} }问题所在 在上面的案例中服务端程序会面临两次阻塞。首先在接收连接请求时服务端程序需要等待新的连接请求。其次一旦建立连接后服务端可能需要等待客户端发送数据。这可能会导致一些问题 单客户端多次请求问题 如果今天只有一个客户端请求按照上面的案例代码我们知道服务端在处理完这个客户端的请求后双方都没有选择断开Channel那客户端第一次给服务端发送完数据后就会回到循环的开始一直阻塞新的连接请求到来而不会去执行下面的IO处理导致第一个客户端的后续请求得不到处理。这是当前单线程服务端模型的局限性只有在接受新连接后才能处理请求。 这是由于ServerSocketChannel等待客户端请求时的阻塞客户端保持连接问题 第一个客户端发送完数据后没有断开与服务端的连接服务端channelList中第一个Channel永远是第一个客户端的服务端会一直等待来自该客户端的数据但是第一个客户端已经没有数据发送了这会导致服务端阻塞无法处理其他连接因为它会一直在等待当前连接上的数据。这是由于SocketChannel处理IO数据时的阻塞。这需要特别处理的情况通常可以通过设置超时或实现多线程来解决。 调整非阻塞 在上面的代码中我们使用了标准的NIO编程方法但同时又称它为非阻塞编程。然而在代码中的两次阻塞操作似乎没有展现出非阻塞的特性这是因为我们还未进行必要的设置。通过对ServerSocketChannel和SocketChannel的配置我们可以将它们转换为非阻塞模式。只需执行以下两行代码serverSocketChannel.configureBlocking(false); 和 socketChannel.configureBlocking(false);。 一旦这些设置生效之前阻塞的客户端请求接收和IO处理不再会阻塞整个程序。当没有客户端请求或没有进行IO请求时从ServerSocketChannel获取的SocketChannel将为null从SocketChannel中读取的字节数将为0。为了进一步说明这一点以下是示例代码 public class MyServer1 {public static void main(String[] args) throws Exception{ServerSocketChannel serverSocketChannel ServerSocketChannel.open();// 设置serverSocketChannel为非阻塞,解决连接阻塞serverSocketChannel.configureBlocking(false);serverSocketChannel.bind(new InetSocketAddress(8000));ListSocketChannel channelList new ArrayList();ByteBuffer buffer ByteBuffer.allocate(20);while (true) {// 此处等待请求不会阻塞如果此时没有客户端连接进来会返回nullSocketChannel socketChannel serverSocketChannel.accept();// 4、如果接收到的socketChannel不为null,则将其添加到channelList中if (socketChannel ! null) {// 设置socketChannel为非阻塞,解决数据读取阻塞socketChannel.configureBlocking(false);channelList.add(socketChannel);}// 5、客户端与服务端 通信 NIOfor (SocketChannel channel : channelList) {// 此处从channel中读取数据到buffer中会阻塞int read channel.read(buffer);if (read 0) {System.out.println(开始实际的数据通信...);buffer.flip(); // 开启读模式CharBuffer result StandardCharsets.UTF_8.decode(buffer);System.out.println(result result);buffer.clear(); // 开启写模式System.out.println(实际的通信已经结束...);}}}} }技巧 对于一个Java类比如我们的客户端我们可能需要在IDEA中运行多个。但是默认情况下我们在IDEA里面将客户端启动以后它处于一直运行的状态如果我这个时候再去点击运行那就会将这个客户端重新运行而不是启动一个新的进程我们可以按照下面的方式进行设置。 打开IntelliJ IDEA并确保你的项目已经打开。在IDEA的顶部菜单栏中点击 “Run”运行。选择 “Edit Configurations”编辑配置。在左侧窗格中点击加号以创建一个新的运行配置。选择 “Application”应用程序作为配置类型。在 “Name”名称字段中为你的运行配置命名例如 “Client1”。在 “Main class”主类字段中指定你想要运行的Java客户端的主类。在 “Program arguments”程序参数字段中如果有需要的话添加客户端程序的参数。在 “Working directory”工作目录字段中指定客户端应运行的工作目录。点击 “OK” 以保存该运行配置。重复上述步骤创建其他客户端的运行配置每个配置使用不同的名称主类和参数。现在你可以通过选择不同的运行配置来启动不同的客户端。在顶部工具栏 中选择你想要运行的配置然后点击运行按钮绿色的播放按钮。 总结 在今天的文章中我们将深入探讨SocketChannel和ServerSocketChannel这两个在网络通信中起着关键作用的组件。我们将揭开网络通信中服务端的两次阻塞现象的神秘面纱并详细介绍NIO如何有效地处理非阻塞。让我们一起扫除对这些概念的盲点深入理解网络通信的内在机制。
http://www.pierceye.com/news/2505/

相关文章:

  • 宁波建设系统网站云南省网站建设收费调查报告
  • 织梦网站根目录在哪里新县城乡规划建设局网站
  • 建设小说网站用什么软件下载莆田网站 建设
  • 阳江市住房和城乡规划建设局网站杭州教育培训网站建设
  • 网站后台管理增加功能彩票网站开发亿云
  • 个人网站备案成功后换做图骂人的图片网站
  • 潍坊网站关键字优化网站建设与管理的心得
  • 网页排版精美的中文网站有什么管理系统
  • 旅游网站首页线上平台建设计划书怎么写
  • 西安学网站开发哪边好网页制作与设计素材
  • 天河区网站公司阿里云域名查询系统
  • 网站数据分析表格优化大师网站
  • 怎样查看网站开发ppt做视频 模板下载网站
  • 广州招聘网网站开发网站建设费税率多少钱
  • 信用渭南网站建设那些网站主做玄幻小说
  • 人社网站和微信平台建设方案模板网站 建设 方法
  • 最受欢迎的建站平台有什么网站做生鲜配送的
  • 青岛网站制作企业WordPress推送至QQ
  • 网站后台无法访问有帮人做网站的人吗
  • 主流网站开发软件网站设计厂
  • 个人网站备案描述国外搜索引擎大全
  • 中国国家培训网官网查询seo做得比较好的企业案例
  • 泰安本地网站网站开发结构
  • 企业网站建设与实施调研报告基本情况gta5网站正在建设
  • 百度推广进入后是别的网站 说是服务器问题网站公司模板
  • 山东省建设发展研究院网站单页
  • 网站 哪些服务器廉江网站建设公司
  • 经营地址怎么在国税网站做更改做美食的网站有那一些
  • 网站建设信用卡分期手续费寻找做网站的
  • 网站建设成本进出成都最新通知