以前开发,很少用的设计模式,即使是最简单的单例模式。
公司有一个项目要求实现socket客户端长连接,并实现自动重连。心想,如果是长连接的话,那么肯定你的客户端端口不能变。需要绑定端口。同时要没5秒发一次心跳。因为对象绑定,所以不能重新new一个channel。当时第一反应就是单例。可能会有别的更好的方法。可以限于技术有限。不说那么多,上关键代码。不好的地方请指点,往大家勿喷!
private static MySocketClient mySocketClient; private Selector selector; private SocketChannel sc ; private MySocketClient(String ip,int port){ try { this.init(ip, port); } catch (Exception e) { e.printStackTrace(); } } public static MySocketClient getInstance(String ip,int port){ if(mySocketClient == null){ mySocketClient = new MySocketClient(ip,port); } return mySocketClient; } public void init(String ip,int port) throws Exception{ try { selector = Selector.open(); sc = SocketChannel.open(); sc.socket().bind(new InetSocketAddress(Config.getLocalhostPort())); boolean b = sc.connect(new InetSocketAddress(InetAddress.getByName(ip), port)); System.out.println("是否连接: "+b); sc.configureBlocking(false); sc.register(selector, SelectionKey.OP_READ); new Thread(new Listener(selector)).start(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void sendMessage(String msg){ try { sc.write(ByteBuffer.wrap(msg.getBytes("gbk"))); } catch (IOException e) { try { sc.close(); mySocketClient = null; } catch (IOException e1) { e1.printStackTrace(); } e.printStackTrace(); } }
Timer timer = new Timer(); timer.schedule(new MyTask(), 1000*2, 1000*20);
public class MyTask extends TimerTask { @Override public void run() { MySocketClient myc = MySocketClient.getInstance(Config.getHostIp(), Config.getHostPort()); myc.sendMessage("$PX\r\n"); } }
相关推荐
主要介绍了浅谈Spring单例Bean与单例模式的区别,具有一定借鉴价值,需要的朋友可以参考下
主要介绍了浅谈C#单例模式的实现和性能对比的相关资料,详细的介绍了6种实现方式,需要的朋友可以参考下
单例模式 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 如果我们要让类在一个虚拟机中只能产生一个对象: 将类的...
主要介绍了Python反射 & 单例模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了Java编程中的单例设计模式,在许多语言的编程过程当中单例模式都被开发者们广泛采用,需要的朋友可以参考下
整理笔记的时候发现以前写的单利设计模式的文章,贴出来给大家分享下!有需要的小伙伴可以来参考下
前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一性——单例模式,...
工厂三兄弟之抽象工厂模式(二) 工厂三兄弟之抽象工厂模式(三) 工厂三兄弟之抽象工厂模式(四) 工厂三兄弟之抽象工厂模式(五) 单例模式-Singleton Pattern 确保对象的唯一性——单例模式 (一) 确保对象的...
4.7.4 单例模式(Singleton Pattern) 5. 多态(Polymorphism) 5.1 多态的概念 5.2 多态存在的三个必要条件 5.3 TestPolymoph.as —— 多态的应用,体会多态带来的好处 5.4 TestPolymoph 内存分析 5.5 多态的好处 ...
11.单例模式的几种实现方式的及优化? 3 12.作用域的类型有哪些? 5 13.深拷贝和浅拷贝的区别? 5 14.多线程和多进程的区别? 6 15.is是对比地址,==是对比值 6 16. read,readline和readlines 6 17.闭包 6 18.垃圾...
本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...