use of com.firenio.component.NioEventLoopGroup in project baseio by generallycloud.
the class TestShowMemoryServlet method doAccept.
@Override
protected void doAccept(Channel ch, HttpFrame f) throws Exception {
TestWebSocketChatServlet chatServlet = context.getBean(TestWebSocketChatServlet.class);
TestWebSocketRumpetrollServlet rumpetrollServlet = context.getBean(TestWebSocketRumpetrollServlet.class);
WebSocketMsgAdapter chatMsgAdapter = chatServlet.getMsgAdapter();
WebSocketMsgAdapter rumpetrollMsgAdapter = rumpetrollServlet.getMsgAdapter();
ChannelContext context = ch.getContext();
String kill = f.getRequestParam("kill");
if (!Util.isNullOrBlank(kill)) {
Integer id = Integer.valueOf(kill, 16);
Channel close_ch = CountChannelListener.chs.get(id);
if (close_ch != null) {
close_ch.getEventLoop().schedule(new DelayTask(10) {
@Override
public void run() {
Util.close(close_ch);
}
});
}
}
BigDecimal time = new BigDecimal(Util.now_f() - context.getStartupTime());
BigDecimal anHour = new BigDecimal(60 * 60 * 1000);
BigDecimal hour = time.divide(anHour, 3, RoundingMode.HALF_UP);
NioEventLoopGroup group = ch.getEventLoop().getGroup();
ByteBufAllocatorGroup allocator = group.getAllocatorGroup();
String allocatorDes = "unpooled";
if (allocator != null) {
StringBuilder builder = new StringBuilder();
String[] res = allocator.toDebugString();
for (int i = 0; i < res.length; i++) {
builder.append("<BR/>\n");
builder.append(res[i]);
}
allocatorDes = builder.toString();
}
int M = 1024 * 1024;
int eventLoopSize = group.getEventLoopSize();
int SERVER_MEMORY_POOL_UNIT = group.getMemoryUnit();
long SERVER_MEMORY_POOL_CAPACITY = group.getMemoryCapacity();
double MEMORY_POOL_SIZE = SERVER_MEMORY_POOL_CAPACITY / (M * 1d);
MEMORY_POOL_SIZE = new BigDecimal(MEMORY_POOL_SIZE).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
Runtime runtime = Runtime.getRuntime();
StringBuilder builder = new StringBuilder(HttpUtil.HTML_HEADER);
builder.append(" <div style=\"margin-left:20px;\">\n");
builder.append("服务器内存使用情况:</BR>\n");
builder.append("虚拟机占用内存:");
builder.append(runtime.totalMemory() / M);
builder.append("M;\n</BR>已占用内存:");
builder.append((runtime.totalMemory() - runtime.freeMemory()) / M);
builder.append("M;\n</BR>空闲内存:");
builder.append(runtime.freeMemory() / M);
builder.append("M;\n</BR>内存池大小:");
builder.append(MEMORY_POOL_SIZE);
builder.append("M;\n</BR>内存池状态:");
builder.append(allocatorDes);
builder.append("\n</BR>聊天室(WebSocket)客户端数量:");
builder.append(chatMsgAdapter.getClientSize());
builder.append("\n</BR>小蝌蚪(WebSocket)客户端数量:");
builder.append(rumpetrollMsgAdapter.getClientSize());
builder.append("\n</BR>服务器当前连接数(io-channel):");
builder.append(CountChannelListener.chs.size());
for (Channel s : CountChannelListener.chs.values()) {
builder.append("\n</BR>");
builder.append(s);
builder.append(", opened: ");
builder.append(DateUtil.get().formatYyyy_MM_dd_HH_mm_ss(new Date(s.getCreationTime())));
}
builder.append(";\n</BR>服务运行时间:");
builder.append(hour + "H;");
builder.append(" </div>\n");
builder.append(HttpUtil.HTML_POWER_BY);
builder.append(HttpUtil.HTML_BOTTOM);
f.setString(builder.toString(), ch);
f.setContentType(HttpContentType.text_html_utf8);
ch.writeAndFlush(f);
}
use of com.firenio.component.NioEventLoopGroup in project baseio by generallycloud.
the class TestHttpBootstrapEngine method bootstrap.
@Override
public void bootstrap(String rootPath, boolean prodMode) throws Exception {
ClassLoader cl = this.getClass().getClassLoader();
boolean debug = Util.isTrueValue(System.getProperty("http.debug"));
if (debug) {
for (; debug; ) {
Util.sleep(100);
}
}
DevelopConfig.NATIVE_DEBUG = true;
DevelopConfig.BUF_DEBUG = true;
DevelopConfig.BUF_PATH_DEBUG = true;
DevelopConfig.SSL_DEBUG = true;
DevelopConfig.CHANNEL_DEBUG = true;
DevelopConfig.DEBUG_ERROR = true;
Options.setEnableEpoll(true);
Options.setEnableUnsafe(true);
Options.setEnableOpenssl(true);
Options.setBufThreadYield(true);
// Options.setEnableUnsafeBuf(true);
HttpDateUtil.start();
final SpringHttpFrameHandle handle = new SpringHttpFrameHandle();
Properties properties = FileUtil.readPropertiesByCls("server.properties", cl);
NioEventLoopGroup group = new NioEventLoopGroup(true);
ChannelAcceptor context = new ChannelAcceptor(group);
ConfigurationParser.parseConfiguration("server.", context, properties);
ConfigurationParser.parseConfiguration("server.", group, properties);
context.setIoEventHandle(handle);
context.addChannelIdleEventListener(new ChannelAliveListener());
context.addChannelEventListener(new WebSocketChannelListener());
context.addChannelEventListener(new LoggerChannelOpenListener());
context.addChannelEventListener(new CountChannelListener());
context.setExecutorGroup(new ThreadEventLoopGroup());
context.addLifeCycleListener(new LifeCycleListener() {
@Override
public void lifeCycleStarting(LifeCycle lifeCycle) {
try {
handle.initialize(context, rootPath, prodMode);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
@Override
public void lifeCycleStopped(LifeCycle lifeCycle) {
handle.destroy(context);
}
});
String[] applicationProtocols = null;
if (properties.getBooleanProperty("app.enableHttp2")) {
context.addProtocolCodec(new Http2Codec());
applicationProtocols = new String[] { "h2", "http/1.1" };
} else {
context.addProtocolCodec(new HttpCodec(4));
context.addProtocolCodec(new WebSocketCodec());
}
int defaultPort = 80;
String pem = properties.getProperty("server.sslPem");
if (!Util.isNullOrBlank(pem)) {
defaultPort = 443;
SslContext sslContext = loadSslContextFromPem(pem, applicationProtocols, cl);
context.setSslContext(sslContext);
}
int port = properties.getIntegerProperty("server.port", defaultPort);
context.setPort(port);
try {
context.bind();
} catch (Exception e) {
HttpDateUtil.stop();
group.stop();
throw e;
}
this.group = group;
this.context = context;
if (properties.getBooleanProperty("app.proxy")) {
NetDataTransferServer.get().startup(group, 18088);
}
}
use of com.firenio.component.NioEventLoopGroup in project baseio by generallycloud.
the class TestSimpleWebSocketClient method main.
public static void main(String[] args) throws Exception {
IoEventHandle eventHandleAdaptor = new IoEventHandle() {
@Override
public void accept(Channel ch, Frame frame) throws Exception {
if (frame instanceof ClientHttpFrame) {
ClientHttpFrame f = (ClientHttpFrame) frame;
if (f.updateWebSocketProtocol(ch)) {
WebSocketFrame f2 = new WebSocketFrame();
Map<String, String> map = new HashMap<>();
map.put("action", "add-user");
map.put("username", "火星人" + Util.randomUUID());
f2.setString(JSON.toJSONString(map), ch);
ch.writeAndFlush(f2);
}
System.out.println(f.getResponse_headers());
} else {
WebSocketFrame f = (WebSocketFrame) frame;
System.out.println(f.getStringContent());
}
}
};
String host = "firenio.com";
int port = 443;
NioEventLoopGroup g = new NioEventLoopGroup();
g.setEnableMemoryPool(false);
ChannelConnector context = new ChannelConnector(g, host, 443);
// context.setExecutorGroup(new ExecutorEventLoopGroup());
context.setIoEventHandle(eventHandleAdaptor);
context.addProtocolCodec(new ClientHttpCodec());
context.addProtocolCodec(new WebSocketCodec());
context.addChannelEventListener(new LoggerChannelOpenListener());
context.setSslContext(SslContextBuilder.forClient(true).build());
Channel ch = context.connect();
String url = "/web-socket-chat";
HttpFrame frame = new WsUpgradeRequestFrame(url);
frame.setRequestHeader(HttpHeader.Host, host + port);
frame.setRequestHeader(HttpHeader.Pragma, "no-cache");
frame.setRequestHeader(HttpHeader.Cache_Control, "no-cache");
frame.setRequestHeader(HttpHeader.User_Agent, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36");
frame.setRequestHeader(HttpHeader.Accept_Encoding, "gzip, deflate, sdch");
frame.setRequestHeader(HttpHeader.Accept_Language, "zh-CN,zh;q=0.8");
ch.writeAndFlush(frame);
Util.sleep(100);
WebSocketFrame f2 = new WebSocketFrame();
Map<String, String> map = new HashMap<>();
map.put("action", "new-message");
map.put("message", TestUtil.newString(1024 * 8));
f2.setString(JSON.toJSONString(map), ch);
ch.writeAndFlush(f2);
Util.sleep(999999999);
Util.close(context);
}
use of com.firenio.component.NioEventLoopGroup in project baseio by generallycloud.
the class TestHttpLoadServer method main.
public static void main(String[] args) throws Exception {
IoEventHandle eventHandle = new IoEventHandle() {
@Override
public void accept(Channel ch, Frame frame) throws Exception {
HttpFrame f = (HttpFrame) frame;
f.setConnection(HttpConnection.KEEP_ALIVE);
f.setContentType(HttpContentType.text_plain);
f.setString("Hello World", ch);
ch.writeAndFlush(f);
ch.release(f);
}
};
NioEventLoopGroup group = new NioEventLoopGroup();
group.setMemoryCapacity(1024 * 1024 * 64);
group.setMemoryUnit(512);
group.setEventLoopSize(2);
ChannelAcceptor context = new ChannelAcceptor(group, 8080);
context.addProtocolCodec(new HttpCodec(8));
context.addProtocolCodec(new WebSocketCodec());
context.setIoEventHandle(eventHandle);
context.addChannelEventListener(new LoggerChannelOpenListener());
context.bind();
}
use of com.firenio.component.NioEventLoopGroup in project baseio by generallycloud.
the class TestProtobaseHeartBeat method main.
public static void main(String[] args) throws Exception {
IoEventHandle eventHandleAdaptor = new IoEventHandle() {
@Override
public void accept(Channel ch, Frame frame) throws Exception {
DebugUtil.debug("______________" + frame);
}
};
NioEventLoopGroup group = new NioEventLoopGroup();
group.setIdleTime(20);
ChannelConnector context = new ChannelConnector(group, "127.0.0.1", 8300);
context.addChannelIdleEventListener(new ChannelActiveListener());
context.addChannelEventListener(new LoggerChannelOpenListener());
context.addProtocolCodec(new ProtobaseCodec());
context.setIoEventHandle(eventHandleAdaptor);
Channel ch = context.connect();
String param = "tttt";
long old = Util.now_f();
for (int i = 0; i < 5; i++) {
Frame f = new ProtobaseFrame();
f.setString(param, ch);
ch.writeAndFlush(f);
Util.sleep(300);
}
System.out.println("Time:" + (Util.past(old)));
Thread.sleep(2000);
Util.close(context);
}
Aggregations