第一次接触微信小程序,想着手写一个基于Netty服务端消息转发的聊天室。遂,上手看了小程序的开发文档,然后又深入研究了Netty消息处理机制,原因分析,并从channel和channelHanndleContext两个角度尝试并分析了消息的发送,writeAndFlush()该方法到底怎么用,什么时候用,哪种用法最好。
服务端代码:
NettyServer端:
package netty;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
public class Netty_server {
private boolean started = false;
private EventLoopGroup bossGroup;
private EventLoopGroup workerGroup;
private ChannelHandler bossHandler;
private ChannelHandler workerHandler;
public void start() {
try {
synchronized (this) {
if (started) {
throw new IllegalStateException("Server was started.");
}
this.started = true;
}
checkArguments();
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup);
bootstrap.channel(NioServerSocketChannel.class);
/*if (bossHandler != null) {
bootstrap.handler(bossHandler);
}*/
if (workerHandler != null) {
bootstrap.childHandler(workerHandler);
}
bootstrap.option(ChannelOption.SO_BACKLOG, 128);
bootstrap.option(ChannelOption.SO_KEEPALIVE, true);
//bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 60000);
ChannelFuture future = bootstrap.bind(6001).sync();
future.channel().closeFuture().sync();
} catch (Exception e) {
System.out.println(""+e.getMessage());
} finally {
this.stop();
System.out.println("netty chat Server 关闭....");
}
}
private void checkArguments() {
if (bossGroup == null) {
bossGroup = new NioEventLoopGroup();
}
if (workerGroup == null) {
workerGroup = new NioEventLoopGroup();
}
if (workerHandler == null) {
workerHandler = new WorkerHandler();
}
}
private void stop() {
if (bossGroup !&#