netty 管道傳遞
netty 管道傳遞
更多幹貨
概述
我們在使用netty的是有都會存在將channelBuffer的資料處理成相應的String或者自定義資料。而這裡主要是介紹管道里面存在的上行和下行的資料處理方式
通過一張圖片來看一下具體管道中的實現過程
程式碼
server
package com.server;
import java.net.InetSocketAddress;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
import org.jboss.netty.handler.codec.string.StringDecoder;
import org.jboss.netty.handler.codec.string.StringEncoder;
public class Server {
public static void main(String[] args) {
//服務類
ServerBootstrap bootstrap = new ServerBootstrap();
//boss執行緒監聽埠,worker執行緒負責資料讀寫
ExecutorService boss = Executors.newCachedThreadPool();
ExecutorService worker = Executors.newCachedThreadPool();
//設定niosocket工廠
bootstrap.setFactory(new NioServerSocketChannelFactory(boss, worker));
//設定管道的工廠
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
@Override
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline pipeline = Channels.pipeline();
pipeline.addLast("handler1", new MyHandler1());
pipeline.addLast("handler2", new MyHandler2());
return pipeline;
}
});
bootstrap.bind(new InetSocketAddress(10101));
System.out.println("start!!!");
}
}
client
package com.server;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 10101);
socket.getOutputStream().write("hello".getBytes());
socket.close();
}
}
MyHandler1
package com.server;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.channel.UpstreamMessageEvent;
public class MyHandler1 extends SimpleChannelHandler {
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
ChannelBuffer buffer = (ChannelBuffer)e.getMessage();
byte[] array = buffer.array();
String message = new String(array);
System.out.println("handler1:" + message);
//傳遞
ctx.sendUpstream(new UpstreamMessageEvent(ctx.getChannel(), "abc", e.getRemoteAddress()));
ctx.sendUpstream(new UpstreamMessageEvent(ctx.getChannel(), "efg", e.getRemoteAddress()));
}
}
MyHandler2
package com.server;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
public class MyHandler2 extends SimpleChannelHandler {
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
String message = (String)e.getMessage();
System.out.println("handler2:" + message);
}
}
相關文章
- Netty使用及事件傳遞Netty事件
- 值傳遞和引用傳遞
- JavaScript的值傳遞和引用傳遞JavaScript
- 快速搞懂值傳遞與引用傳遞
- Java的值傳遞和引用傳遞Java
- go 值傳遞和地址傳遞的例子Go
- c++指標傳遞與引用傳遞C++指標
- Day30--值傳遞和引用傳遞
- Java - 是值傳遞還是引用傳遞Java
- vue---元件間傳遞訊息(父子傳遞訊息,兄弟傳遞訊息)Vue元件
- JS的方法引數傳遞(按值傳遞)JS
- Netty 框架學習 —— 傳輸Netty框架
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- netty系列之:在netty中使用native傳輸協議Netty協議
- chan中傳遞map資料,傳遞的是引用
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- 解惑4:java是值傳遞還是引用傳遞Java
- 引數傳遞方式必須是const引用傳遞
- 關於值傳遞和引用傳遞的解釋
- 傳遞函式函式
- java值傳遞Java
- 引數傳遞
- 按值傳遞
- C#|.net core 基礎 - 值傳遞 vs 引用傳遞C#
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- html、php和js值的傳遞(使用ajax進行傳遞)HTMLPHPJS
- swift 函式傳遞Swift函式
- 抑鬱會“傳遞”?
- VUE 傳遞資料Vue
- 使用Intent傳遞物件Intent物件
- Mybatis引數傳遞MyBatis
- flink watermark傳遞原理
- Blazor巢狀傳遞Blazor巢狀
- Java只有值傳遞Java
- JavaScript 是如何工作的:JavaScript 的共享傳遞和按值傳遞JavaScript
- Java是值傳遞還是引用傳遞,又是怎麼體現的Java
- JavaScript之按值傳遞JavaScript
- Flutter中訊息傳遞Flutter