首页 / NETTY / Netty服务器Demo
Netty服务器Demo
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Netty服务器Demo,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6871字,纯文字阅读大概需要10分钟。
内容图文

代码在我自己的gitlab:
http://120.76.219.142/marc/nettyServer
DML类:
package com.wulala; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.util.Properties; import java.util.UUID; public class ExecuteDML { private String driver; private String url; private String user; private String password; public void initParam(String paramFile) throws Exception { Properties props = new Properties(); props.load(new FileInputStream(paramFile)); driver = props.getProperty("driverClassName"); url = props.getProperty("url"); user = props.getProperty("user"); password = props.getProperty("password"); } public int insertData(String data) throws Exception { Class.forName(driver); try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement()) { return stmt.executeUpdate("INSERT INTO MEMS_REC (ID,X,Y, CREATE_TIME) VALUES (‘" + UUID.randomUUID().toString() + "‘,‘1‘,‘" + data + "‘, now());"); } } public int insertWXData(String deviceID, int activate) throws Exception { Class.forName(driver); try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement()) { return stmt.executeUpdate("INSERT INTO WANG_XIN (ID,DEVICE_ID,ACTIVATE) VALUES (‘" + UUID.randomUUID().toString() + "‘,‘" + deviceID + "‘," + activate + ");"); } } /*public static void main(String[] args) { ExecuteDML edml = new ExecuteDML(); int result=0; try { edml.initParam("dbconfig.properties"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } try { result = edml.insertWXData("xxxxasdf", 9999); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("Total " + result + " record been add"); } */ }
Handler类:
package com.wulala; import java.io.UnsupportedEncodingException; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; public class TimeServerHandler extends ChannelHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { ByteBuf buf = (ByteBuf) msg; byte[] req = new byte[buf.readableBytes()]; buf.readBytes(req); String body = ""; try { body = new String(req, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } if (body.length() > 8 && (body.length() < 15)) { System.out.println("The time server receive order: " + body); ExecuteDML edml = new ExecuteDML(); String deviceID = body.substring(0, 8); int activate = Integer.valueOf(body.substring(8)); int insertResult = 0; System.out.println("devceiID: " + deviceID + " activate: " + activate); try { edml.initParam("dbconfig.properties"); insertResult = edml.insertWXData(deviceID, activate); // insertResult = edml.insertWXData("xxxxasdf", 1234); } catch (Exception e) { e.printStackTrace(); } System.out.println("Total " + insertResult + " result been changed"); } // String currentTime = "QUERY TIME ORDER".equalsIgnoreCase(body) ? new // java.util.Date(System.currentTimeMillis()).toString() : "BAD ORDER"; // ByteBuf resp = Unpooled.copiedBuffer(currentTime.getBytes()); // ctx.write(resp); } @Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { ctx.flush(); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { ctx.close(); } }
MainServer类:
package com.wulala; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; public class TimeServer { public void bind(int port) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 1024) .childHandler(new ChildChannelHandler()); ChannelFuture f = b.bind(port).sync(); f.channel().closeFuture().sync(); } finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } private class ChildChannelHandler extends ChannelInitializer<SocketChannel> { @Override protected void initChannel(SocketChannel arg0) throws Exception { arg0.pipeline().addLast(new TimeServerHandler()); } } public static void main(String[] args) throws Exception { int port = 9998; new TimeServer().bind(port); } }
Client类:
package com.wulala; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String[] args) throws InterruptedException { for (int i = 1; i < 10; i++) { SocketClient socketClient = new SocketClient(); socketClient.i = i; socketClient.start(); } // while (true) { // Client client = new Client(); // client.run(); // Thread.sleep(1000); // } } public void run() { Socket client; try { // client = new Socket("127.0.0.1", 9998); client = new Socket("120.25.76.67", 9998); // 2.鎵撳紑socket鐨勬祦淇℃伅锛屽噯澶囦笅闈㈢殑鎿嶄綔 OutputStream os = client.getOutputStream(); // 3.鍐欎俊鎭? os.write(("xxxxasdf123456").getBytes()); // for (int i = 0; i < 1000000; i++) { // // System.out.println("waiting..."); // } os.flush(); os.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class SocketClient extends Thread { int i; @Override public void run() { // 1.寤虹珛scoket杩炴帴 Socket client; try { client = new Socket("120.25.76.67", 9998); // 2.鎵撳紑socket鐨勬祦淇℃伅锛屽噯澶囦笅闈㈢殑鎿嶄綔 OutputStream os = client.getOutputStream(); // 3.鍐欎俊鎭? os.write(("xxxxasdf" + Thread.currentThread().getId()).getBytes()); // String filmName = "c://io" + i + ".rmvb"; // // FileOutputStream fileOutputStream = new // FileOutputStream(filmName); // // // 3.1鎺ユ敹鏈嶅姟鍣ㄧ鐨勫弽棣? // InputStream is = client.getInputStream(); // byte b[] = new byte[1024]; // // while (is.read(b) > 0) { // fileOutputStream.write(b); // } // 4.鍏抽棴socket // 鍏堝叧闂緭鍑烘祦 os.flush(); os.close(); // 鏈?鍚庡叧闂璼ocket client.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
具体实现就是Netty负责驱动一个DML的类, 往数据库里面填入一个值.
仅此而已.
测试过并发(100线程个同时访问.)
https://app01.saferkid.net/IntelGeek/record/getLast20DeviceRecordByCustomerId.do
访问这个接口可以看到效果.
这个接口接下来可能会移植到一个静态的网站中去.
原文:http://www.cnblogs.com/Montauk/p/6474943.html
内容总结
以上是互联网集市为您收集整理的Netty服务器Demo全部内容,希望文章能够帮你解决Netty服务器Demo所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。