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事件
- 在父子程式間用管道傳遞檔案描述符
- 【Netty】Netty傳輸Netty
- 值傳遞與引用傳遞
- 值傳遞和引用傳遞
- JavaScript的值傳遞和引用傳遞JavaScript
- 快速搞懂值傳遞與引用傳遞
- Java的值傳遞和引用傳遞Java
- go 值傳遞和地址傳遞的例子Go
- Java - 是值傳遞還是引用傳遞Java
- Java中的值傳遞和引用傳遞Java
- c++指標傳遞與引用傳遞C++指標
- 資訊傳遞
- vue---元件間傳遞訊息(父子傳遞訊息,兄弟傳遞訊息)Vue元件
- JS的方法引數傳遞(按值傳遞)JS
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- 解惑4:java是值傳遞還是引用傳遞Java
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- chan中傳遞map資料,傳遞的是引用
- 關於值傳遞和引用傳遞的解釋
- java方法中只有值傳遞,沒有引用傳遞Java
- JS是按值傳遞還是按引用傳遞?JS
- 傳遞函式函式
- onTouch 事件傳遞事件
- java值傳遞Java
- 按值傳遞
- 引數傳遞
- Netty 框架學習 —— 傳輸Netty框架
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- 引數傳遞方式必須是const引用傳遞
- js中函式引數值傳遞和引用傳遞JS函式
- ES5中的值傳遞/引用傳遞--解釋
- Android訊息傳遞之元件間傳遞訊息Android元件
- maven中的傳遞依賴和傳遞依賴的解除Maven
- C#|.net core 基礎 - 值傳遞 vs 引用傳遞C#
- html、php和js值的傳遞(使用ajax進行傳遞)HTMLPHPJS
- 獲取url傳遞傳遞的某個引數的值
- 使用Intent傳遞物件Intent物件