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

辽宁建设工程信息网作用搜索引擎优化策略不包括

辽宁建设工程信息网作用,搜索引擎优化策略不包括,想自己做淘宝有什么网站吗,vuejs做视频网站设计highlight: arduino-light Selector 示意图和特点说明 一个 I/O 线程可以并发处理 N 个客户端连接和读写操作,这从根本上解决了传统同步阻塞 I/O 一连接一线程模型。架构的性能、弹性伸缩能力和可靠性都得到了极大的提升。 服务端流程 1、当客户端连接服务端时&…

highlight: arduino-light

Selector 示意图和特点说明

一个 I/O 线程可以并发处理 N 个客户端连接和读写操作,这从根本上解决了传统同步阻塞 I/O 一连接一线程模型。架构的性能、弹性伸缩能力和可靠性都得到了极大的提升。

image.png

服务端流程

  • 1、当客户端连接服务端时,服务端会通过 ServerSocketChannel 得到 SocketChannel:获取通道

    java ServerSocketChannel ssChannel = ServerSocketChannel.open();

  • 2、切换非阻塞模式

    java ssChannel.configureBlocking(false);

  • 3、绑定连接

    java ssChannel.bind(new InetSocketAddress(9999));

  • 4、 获取选择器

    java Selector selector = Selector.open();

  • 5、 将通道注册到选择器上, 并且指定“监听接收事件”

    java ssChannel.register(selector, SelectionKey.OP_ACCEPT);

    1. 轮询式的获取选择器上已经“准备就绪”的事件
  • java //轮询式的获取选择器上已经“准备就绪”的事件,大于0 说明存在 准备就绪的事件 while (selector.select() > 0) {        System.out.println("轮一轮");        //7. 获取当前选择器中所有注册的“选择键(已就绪的监听事件)”        Iterator<SelectionKey> it = selector.selectedKeys().iterator();        while (it.hasNext()) {            //8. 获取准备“就绪”的是事件            SelectionKey sk = it.next();            //9. 判断具体是什么事件准备就绪            if (sk.isAcceptable()) {                //10. 若“接收就绪”,获取客户端连接                SocketChannel sChannel = ssChannel.accept();                //11. 切换非阻塞模式                sChannel.configureBlocking(false);                //12. 将该通道注册到选择器上并修改注册事件为read                sChannel.register(selector, SelectionKey.OP_READ);           } else if (sk.isReadable()) {                //13. 获取当前选择器上“读就绪”状态的通道                SocketChannel sChannel = (SocketChannel) sk.channel();                //14. 读取数据                ByteBuffer buf = ByteBuffer.allocate(1024);                int len = 0;                while ((len = sChannel.read(buf)) > 0) {                    buf.flip();                    System.out.println(new String(buf.array(), 0, len));                    buf.clear();               }           }            //15. 处理完毕 移除选择键 SelectionKey            it.remove();       }   } }

客户端流程

1.获取通道

java SocketChannel sChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 9999));

2.切换非阻塞模式

java sChannel.configureBlocking(false);

3.分配指定大小的缓冲区

java ByteBuffer buf = ByteBuffer.allocate(1024);

4.发送数据给服务端

java Scanner scan = new Scanner(System.in); while(scan.hasNext()){ String message = scan.nextLine(); buf.put((new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(System.currentTimeMillis()) + "\n" + message).getBytes()); buf.flip(); sChannel.write(buf); buf.clear(); } //关闭通道 sChannel.close();

NIO非阻塞式网络通信入门案例

需求:服务端接收客户端的连接请求,并接收多个客户端发送过来的事件。

代码案例

java /**  客户端 */ public class Client { ​ public static void main(String[] args) throws Exception { //1. 获取通道 - SelectionKey.OP_ACCEPT 对应监听接收事件 SocketChannel sChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 9999)); //2. 切换非阻塞模式 sChannel.configureBlocking(false); //3. 分配指定大小的缓冲区 ByteBuffer buf = ByteBuffer.allocate(1024); //4. 发送数据给服务端 Scanner scan = new Scanner(System.in);         while(scan.hasNext()){ String message = scan.nextLine(); buf.put((new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(System.currentTimeMillis()) + "\n" + message).getBytes()); buf.flip();            //客户端写对应服务器端读就绪 sChannel.write(buf); buf.clear(); } //5. 关闭通道 sChannel.close(); } } ​ /** 服务端 */ public class Server {    public static void main(String[] args) throws IOException {        //1. 获取通道        ServerSocketChannel ssChannel = ServerSocketChannel.open();        //2. 切换非阻塞模式        ssChannel.configureBlocking(false);        //3. 绑定连接        ssChannel.bind(new InetSocketAddress(9999));        //4. 获取选择器        Selector selector = Selector.open();        //5. 将通道注册到选择器上, 并且指定“监听接收事件”        ssChannel.register(selector, SelectionKey.OP_ACCEPT);        //6. 轮询式的获取选择器上已经“准备就绪”的事件        while (selector.select() > 0) {            System.out.println("轮一轮");            //7. 获取当前选择器中所有注册的“选择键(已就绪的监听事件)”            Iterator<SelectionKey> it = selector.selectedKeys().iterator();            while (it.hasNext()) {                //8. 获取准备“就绪”的是事件                SelectionKey sk = it.next();                //9. 判断具体是什么事件准备就绪                if (sk.isAcceptable()) {                    //10. 若“接收就绪”,获取客户端连接                    SocketChannel sChannel = ssChannel.accept();                    //11. 切换非阻塞模式                    sChannel.configureBlocking(false);                    //12. 将该通道注册到选择器上 这里可以把缓存指定上                    sChannel.register(selector, SelectionKey.OP_READ);               } else if (sk.isReadable()) {                    //13. 获取当前选择器上“读就绪”状态的通道                    SocketChannel sChannel = (SocketChannel) sk.channel();                    //14. 读取数据                    ByteBuffer buf = ByteBuffer.allocate(1024);                    int len = 0;                    while ((len = sChannel.read(buf)) > 0) {                        buf.flip();                        System.out.println(new String(buf.array(), 0, len));                        buf.clear();                   }               }                //15. 取消选择键 SelectionKey                it.remove();           }       }   } }

尚硅谷代码案例

```java package com.atguigu.nio;

import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.Iterator;

//网络服务器端程序 public class NIOServer { public static void main(String[] args) throws Exception{ //1. 得到一个ServerSocketChannel对象 ServerSocketChannel serverSocketChannel=ServerSocketChannel.open(); //2. 得到一个Selector对象 Selector selector=Selector.open(); //3. 绑定一个端口号, 在服务器的6666监听 2个方式有什么区别 //serverSocketChannel.bind(new InetSocketAddress(6666)); serverSocketChannel.socket().bind(new InetSocketAddress(6666)); //4. 设置非阻塞方式 serverSocketChannel.configureBlocking(false); //5. 把ServerSocketChannel对象注册给Selector对象 serverSocketChannel.register(selector, SelectionKey.OPACCEPT); //6. 干活 while(true){ //6.1 监控客户端 //如果使用 selector.select() 就会阻塞在这里的 if(selector.select(1000)==0){ //nio非阻塞式的优势 System.out.println("Server:等待了1秒,无客户端连接"); continue; } //6.2 得到SelectionKey,判断通道里的事件 Iterator keyIterator=selector.selectedKeys().iterator(); while(keyIterator.hasNext()){ SelectionKey key=keyIterator.next(); if(key.isAcceptable()){ //客户端连接请求事件 SocketChannel socketChannel=serverSocketChannel.accept(); socketChannel.configureBlocking(false); socketChannel.register(selector,SelectionKey.OP READ, ByteBuffer.allocate(1024)); } if(key.isReadable()){ //读取客户端数据事件 SocketChannel channel=(SocketChannel) key.channel(); ByteBuffer buffer=(ByteBuffer) key.attachment(); channel.read(buffer); System.out.println("接收到客户端数据:"+new String(buffer.array())); } // 6.3 手动从集合中移除当前key,防止重复处理 keyIterator.remove(); } } }

} ```

```java package com.atguigu.nio; ​ import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; ​ public class NIOClient {    public static void main(String[] args) throws Exception{ ​        //得到一个网络通道        SocketChannel socketChannel = SocketChannel.open();        //设置非阻塞        socketChannel.configureBlocking(false);        //提供服务器端的ip 和 端口        InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 6666);        //连接服务器        if (!socketChannel.connect(inetSocketAddress)) {            while (!socketChannel.finishConnect()) {                System.out.println("因为连接需要时间,客户端不会阻塞,可以做其它工作..");           }       } ​        //...如果连接成功,就发送数据        String str = "hello, 尚硅谷~";        //Wraps a byte array into a buffer        ByteBuffer buffer = ByteBuffer.wrap(str.getBytes());        // 发送数据,将 buffer 数据写入 channel        socketChannel.write(buffer);        System.in.read(); ​   } }

```

使用6666端口有个坑爹的地方,端口号被占用。

解决:https://www.cnblogs.com/jf-67/p/8425405.html

原因:https://blog.csdn.net/hi_pig2003/article/details/52995528

http://www.wooajung.com/news/27443.html

相关文章:

  • 企业门户网站管理要求凤凰网台湾资讯
  • 网站建设发展历程关键词搜索技巧
  • 做soho建立网站app投放渠道有哪些
  • 合肥php网站开发百度地图排名怎么优化
  • 西宁做网站制作的公司国内新闻今日头条
  • 做网站报价公司2023年6月份疫情严重吗
  • ibm用来做测试的网站百度搜索引擎投放
  • 网上营销网站武汉seo建站
  • app和网站开发区别合肥网络营销公司
  • 代做土木工程专业毕业设计网站白帽seo是什么
  • 厦门seo服务商荥阳seo推广
  • 商业活动的网站建设热门关键词
  • wordpress 栏目链接地址品牌企业seo咨询
  • 电子ic网站建设网络销售渠道有哪些
  • 湖南省专业建设公司网站的机构网络优化工程师是干什么的
  • 搬瓦工 做网站海外aso优化
  • wordpress企业网站开发大数据分析网站
  • 免费建站的站点网站互联网推广引流公司
  • 网站正在建设中html5百度提交收录入口
  • 农产品网站建设方案广告推广的软件
  • 网站建设ppt课件网络营销策划方案书
  • 做推广有什么好网站谷歌关键词
  • 南阳商都网站做网站腾讯企点app下载安装
  • 网站做优化有几种方式武汉电脑培训学校有哪些
  • 组工网站建设方案网站流量统计分析的维度包括
  • 做网站上传电子书福州百度代理
  • 企业网站建设服务公司网页制作软件下载
  • 可以直接玩游戏的网站国内搜索引擎排名第一的是
  • centos7网站开发广东seo点击排名软件哪里好
  • 设计网站多少钱班级优化大师客服电话