Netty从入门到精通到放弃
有时间想记录一下关于Netty的知识。
第一课:传统IO的特点。
package com.example.aimei.controller; import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; /**
* @author yuanzipeng
* @date 2018/11/21
*/
public class OioServer { public static void main(String[] args) throws Exception {
//加线程
ExecutorService threadPool = Executors.newCachedThreadPool();
//创建ServerSocket服务
ServerSocket serverSocket = new ServerSocket(5566);
System.out.println("服务端启动!");
while (true) {
//获取一个套接字(阻塞)
Socket socket = serverSocket.accept();
System.out.println("来一个客户端!");
threadPool.execute(new Runnable() {
@Override
public void run() {
//业务处理
handle(socket);
}
});
}
} public static void handle(Socket socket) {
try {
byte[] bytes = new byte[1024];
InputStream inputStream = socket.getInputStream();
while (true) {
//读取数据(阻塞)
int read = inputStream.read(bytes);
if (read != -1) {
System.out.println(new String(bytes, 0, read));
} else {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("Socke关闭!");
try {
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
运行上面的代码启动服务端,用DOS命令窗口作为客户端,命令为:telnet 127.0.0.1 5566,如下:
确定,然后快捷键CTRL+],然后输入send hello
java控制台就会收到hello,可以多连几个客户端。
从上面的代码可以知道传统的IO在获取套接字和读取数据的时候分别有一次阻塞。如果不用线程一个ServerSocket服务只能连一个客户端,用了线程处理相当于一个ServerSocket服务中的一个线程只能连接一个客户端。相对于NIO缺点就是消耗的资源比较多,只适合作为短连接,不适合作为长连接。
Netty从入门到精通到放弃的更多相关文章
- Android Studio教程从入门到精通
最新2.0系列文章参考: Android Studio2.0 教程从入门到精通Windows版 - 安装篇Android Studio2.0 教程从入门到精通Windows版 - 入门篇Android ...
- 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
- SCRM从入门到精通01
[SCRM从入门到精通01]如何基于微信开放接口开发企业的微信CRM? 业内一直都在传说微信是天生的CRM,可是没有人看到过微信CRM的真容.随着微信最新公众平台的改版和开放接口的微信认证开放,微信C ...
- Python基础知识详解 从入门到精通(七)类与对象
本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...
- JavaScript从入门到精通(转)
JavaScript从入门到精通 转自: https://github.com/Eished/JavaScript_notes 视频连接:https://www.bilibili.com/video/ ...
- <程序员从入门到精通> -- How
定位 自己才是职业生涯的管理者,想清楚自己的发展路径: 远期的理想是什么?近期的规划是什么?今日的任务和功课又是什么? 今日之任务或功课哪些有助于近期之规划的实现,而近期之规划是否有利于远期之理想? ...
- 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引
索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(1)搭建MVC环境 注册区域 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(2)创建 ...
- ASP.NET MVC4入门到精通系列目录汇总
序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...
- Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引
因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...
随机推荐
- [NLP]非终结字符集&终结字符集
参考:终结符和非终结符 终结字符集: 不能单独出现在推导式左边的符号, 不能够再继续推导. 非终结字符集: 不是终结字符集中的符号都为非终结字符集. 是可拆分元素. 例子: 文法如下: S->A ...
- 1-Two Sum @LeetCode
1-Two Sum 题目 思路 题目中得到的信息有: 都是整数,并且可正可负,也可一个值包含多个: 只有一个正确的结果. 方法一: 最直接的思路就是两重循环遍历,时间复杂度是O(n^2),这样肯定不行 ...
- python io-os
#IO - os import os; #文件改名 #os.rename('io.txt','newio.txt'); #删除文件 #os.remove('io2.txt'); #创建文件夹(目录) ...
- OpenCV中feature2D——BFMatcher和FlannBasedMatcher
作者:holybin 原文:https://blog.csdn.net/holybin/article/details/40926315 Brute Force匹配和FLANN匹配是opencv二维特 ...
- Windows本地解决MySql插入中文乱码问题
JSP页面输入的数据也要转化UTF8的编码字符串在传人数据库 一劳用逸 在 MySQL 的安装目录下有一个 my.ini 配置文件,通过修改这个配置文件可以一劳永逸的解决乱码问题.在这个配置文件中 [ ...
- CentOS7(64) yum安装、配置PostgreSQL 11
一.安装postgresql11 1.Install the repository RPM: 添加RPM yum install https://download.postgresql.org/pub ...
- python之路——23
复习 1.类定义 函数--方法--动态属性 必须传self 变量--类属性--静态属性 __init__方法--初始化方法2.实例化 1.使用:对象 = 类() 2.实例和对象没有区别 3.对象调用方 ...
- C++ 64位操作系统调用 RegOpenKey() 读取注册表,返回 2, ERROR_FILE_NOT_FOUND
环境:64位操作系统, VS2017 首先在命令行执行 REG ADD HKLM\Software\seastarsun /v serial /t REG_SZ /d 58ae4cb077a4e1 在 ...
- Java tomcat Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost
关于 下面问题是因为(8005, 8080, 8009) 被原tomcat占用了. Several ports (8005, 8080, 8009) required by Tomcat v9.0 S ...
- 团队第五次 # scrum meeting
github 本此会议项目由PM召开,召开时间为4-9日晚上9点 召开时长15分钟 任务表格 袁勤 负责协调前后端 https://github.com/buaa-2016/phyweb/issues ...