内容简介:经过几个星期的苦战,终于迎来了第一个完整版,支持http,udp,websocket。 将一开始的规划都补齐了,后面将持续迭代。 本次的更新点如下 一、内部实现原理做了修改 一开始用的AIO来实现异步,后来因为回调太多,...
经过几个星期的苦战,终于迎来了第一个完整版,支持http,udp,websocket。 将一开始的规划都补齐了,后面将持续迭代。
本次的更新点如下
一、内部实现原理做了修改
一开始用的AIO来实现异步,后来因为回调太多,编程复杂度比较高,而且不好控制线程数量,所以给换掉了,换成了NIO。
NIO 比较流行的一个做法是使用Selector,它类似于一个队列,请求来了都会注册进去,然后由一个线程去遍历消费这些请求。 这就带来了一个问题,当请求数量多了以后,无法最大化的利用cpu的多核算力, 而且在消费的过程中如果遇到了 比较耗时的任务,将会堵死整个循环。
所以,我没有采用Selector,而是直接用的accept,在一个while里 调用accept,当有请求来了以后,accept会返回一个channel,这个channel会被丢到一个队列里。
可以看下面这张图
当服务启动的时候,会先初始化几个线程出来,具体初始几个可以自己配置,每个线程都会监控一个队列。



当队列里进来了任务,线程就会开始干活,依次消费自己管辖的这个队列里的任务。
整体模型大概是这样的

当客户端发起一个请求到服务端,服务端就会以轮询的方式给其中一个线程的队列添加一个任务,然后继续监控accept。
线程发现队列不为空,就会消费自己管辖的队列,去调用后面的业务逻辑。
这么做的好处
- 线程数量是可控的,不会出现请求多了以后 导致线程数过多 而对资源造成极大的压力
- 他是异步的,请求来了直接丢队列里即可,不用等在这消耗时间,而是直接去接收下一个请求。
- 请求分配给线程 是用的轮询算法,可以保证每个线程的压力均匀。
二、支持websocket了(现在还不是很成熟,连接如果很多,慎用)
创建handler
/**
* WebSocket
*/
public class DemoSocketHandler implements WebSocketHandler {
/**
* 有连接进来时调用
*/
@Override
public void onOpen(WebSocketSession webSocketSession) {
System.out.println("连接了websocket");
}
/**
* 连接断开时调用
*/
@Override
public void onClose(WebSocketSession webSocketSession) {
System.out.println("关闭了websocket");
}
/**
* 有消息进来时调用
*/
@Override
public void onMessage(String message, WebSocketSession webSocketSession) {
System.out.println("收到了消息"+message);
try{
webSocketSession.send("我收到了");
} catch (Exception e){
e.printStackTrace();
}
}
}
在创建http服务的时候,把handler添加进去
Magician.createHttpServer()
.threadSize(5)
.httpHandler("/", new DemoRequestHandler())
// 注意这句
.webSocketHandler("/websocket", new DemoSocketHandler())
.bind(8080, 1000).start();
三、支持UDP了
创建handler
public class DemoUDPHandler implements MagicianUDPHandler {
@Override
public void receive(ByteArrayOutputStream byteArrayOutputStream) {
}
}
创建UDP服务
Magician.createUdpServer()
.bind(8088)
.handler(new DemoUDPHandler())
.start();
更多信息,可以访问官网
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- cURL 7.70.0 发布,原生支持 JSON、实验性支持 MQTT
- hi-nginx-1.5.2 发布,优化 cpp 支持,添加 groovy 支持
- hi-nginx-1.5.2 发布,优化 cpp 支持,添加 groovy 支持
- Spring Tools 4.3.0 发布,支持 Eclipse Theia 并弃用 Atom 支持
- Spring Tools 4.3.0 发布,支持 Eclipse Theia 并弃用 Atom 支持
- Tiki 20 发布,支持 markdown 语法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ordering Disorder
Khoi Vinh / New Riders Press / 2010-12-03 / USD 29.99
The grid has long been an invaluable tool for creating order out of chaos for designers of all kinds—from city planners to architects to typesetters and graphic artists. In recent years, web designers......一起来看看 《Ordering Disorder》 这本书的介绍吧!
