Java Code Examples for org.apache.mina.core.future.ConnectFuture#awaitUninterruptibly()
The following examples show how to use
org.apache.mina.core.future.ConnectFuture#awaitUninterruptibly() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: HelloTcpClient.java From mina-examples with MIT License | 6 votes |
public static void main(String[] args) { NioSocketConnector connector = new NioSocketConnector(); //TCP Connector connector.getFilterChain().addLast("logging", new LoggingFilter()); connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new ObjectSerializationCodecFactory())); connector.getFilterChain().addLast("mdc", new MdcInjectionFilter()); connector.setHandler(new HelloClientHandler()); IoSession session; for (;;) { try { ConnectFuture future = connector.connect(new InetSocketAddress(HOSTNAME, PORT)); future.awaitUninterruptibly(); session = future.getSession(); break; } catch (RuntimeIoException e) { System.err.println("Failed to connect."); e.printStackTrace(); } } session.getCloseFuture().awaitUninterruptibly(); connector.dispose(); }
Example 2
Source File: MinaClient.java From java-study with Apache License 2.0 | 6 votes |
public static void main(String[] args) { // 创建一个非阻塞的客户端程序 IoConnector connector = new NioSocketConnector(); // 设置链接超时时间 connector.setConnectTimeout(30000); ProtocolCodecFilter pf=new ProtocolCodecFilter((new MyTextLineCodecFactory(Charset .forName("utf-8"), "\r\n"))); // 添加过滤器 connector.getFilterChain().addLast("codec", pf); // 添加业务逻辑处理器类 connector.setHandler(new MinaClientHandler()); IoSession session = null; try { ConnectFuture future = connector.connect(new InetSocketAddress( HOST, PORT));// 创建连接 future.awaitUninterruptibly();// 等待连接创建完成 session = future.getSession();// 获得session String msg="hello \r\n"; session.write(msg);// 发送消息 logger.info("客户端与服务端建立连接成功...发送的消息为:"+msg); } catch (Exception e) { e.printStackTrace(); logger.error("客户端链接异常...", e); } session.getCloseFuture().awaitUninterruptibly();// 等待连接断开 connector.dispose(); }
Example 3
Source File: AbstractMINAService.java From sailfish-core with Apache License 2.0 | 6 votes |
public void connect(long timeout) throws Exception { logger.info("Connecting to - {}:{}", getHostname(), getPort()); preConnect(); ConnectFuture connectFuture = getConnectFuture(); connectFuture.awaitUninterruptibly(timeout); if(!connectFuture.isConnected()) { handleNotConnected(connectFuture.getException()); return; } changeStatus(status -> status == ServiceStatus.WARNING, ServiceStatus.STARTED, "Service connected"); session = createSession(connectFuture.getSession()); postConnect(); logger.info("Connected to - {}:{}", getHostname(), getPort()); }
Example 4
Source File: Robot.java From jforgame with Apache License 2.0 | 6 votes |
public void doConnection() { NioSocketConnector connector = new NioSocketConnector(); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(SerializerHelper.getInstance().getCodecFactory())); connector.setHandler(new ClientHandler()); System.out.println("开始连接socket服务端"); int serverPort = ServerConfig.getInstance().getServerPort(); ConnectFuture future = connector.connect(new InetSocketAddress(serverPort)); future.awaitUninterruptibly(); IoSession session = future.getSession(); this.session = new RobotSession(this, session); this.session.registerMessageHandler(); this.login(); }
Example 5
Source File: TCPTestClient.java From streamsx.topology with Apache License 2.0 | 6 votes |
public synchronized void connect() throws InterruptedException { for (int i = 0; i < 5; i++) { try { TRACE.info("Attempting to connect to test collector: " + addr); ConnectFuture future = connector.connect(addr); future.awaitUninterruptibly(); session = future.getSession(); TRACE.info("Connected to test collector: " + addr); return; } catch (RuntimeIoException e) { e.printStackTrace(System.err); if (i < 4) { TRACE.warning("Failed to connect to test collector - retrying: " + addr); Thread.sleep(1000); } else { TRACE.severe("Failed to connect to test collector: " + addr); throw e; } } } }
Example 6
Source File: ClientTestServer.java From java-study with Apache License 2.0 | 5 votes |
public IoSession getIOSession(IoConnector connector){ ConnectFuture future = connector.connect(new InetSocketAddress("192.168.2.55", 1255)); // 等待是否连接成功,相当于是转异步执行为同步执行。 future.awaitUninterruptibly(); // 连接成功后获取会话对象。 如果没有上面的等待, 由于connect()方法是异步的, session可能会无法获取。 IoSession session = null; try{ session = future.getSession(); }catch(Exception e){ e.printStackTrace(); } return session; }
Example 7
Source File: GameClient.java From gameserver with Apache License 2.0 | 5 votes |
/** * Connect to remote message server. * @return */ public boolean connectToServer() { try { resourceLock.lock(); if ( log.isInfoEnabled() ) { log.info("Connect to message server : " + remoteHost + ":" + remotePort); } connector = new NioSocketConnector(); connector.getFilterChain().addLast("codec", new GameProtocolCodecFilter()); connector.setHandler(this.handler); int heartBeatSecond = GlobalConfig.getInstance().getIntProperty("message.heartbeat.second"); if ( log.isDebugEnabled() ) { log.debug("heartBeatSecond : " + heartBeatSecond); } connector.getSessionConfig().setBothIdleTime(heartBeatSecond); // Make a new connection ConnectFuture connectFuture = connector.connect(new InetSocketAddress(remoteHost, remotePort)); // Wait until the connection is make successfully. connectFuture.awaitUninterruptibly(CONNECT_TIMEOUT); try { session = connectFuture.getSession(); //Tell caller we can write message. // connectedCond.signal(); if ( log.isInfoEnabled() ) { log.info("connect to " + remoteHost + ":" + remotePort); } return true; } catch (Throwable e) { disconnectFromServer(); return false; } } finally { resourceLock.unlock(); } }
Example 8
Source File: NetSupport.java From TestClient with Apache License 2.0 | 5 votes |
public boolean connect(NioSocketConnector connector, SocketAddress address) { if(!isSetChain){ throw new IllegalStateException( "please set ConservationChain first !"); } if (session != null && session.isConnected()) { throw new IllegalStateException( "Already connected. Disconnect first."); } try { IoFilter CODEC_FILTER = new ProtocolCodecFilter( new GameProtocolcodecFactory()); connector.getFilterChain().addLast("codec", CODEC_FILTER); connector.setHandler(handler); ConnectFuture future1 = connector.connect(address); future1.awaitUninterruptibly(); if (!future1.isConnected()) { return false; } session = future1.getSession(); return true; } catch (Exception e) { return false; } }
Example 9
Source File: MinaClient.java From MtgDesktopCompanion with GNU General Public License v3.0 | 5 votes |
public MinaClient(String server, int port) { p = new Player(); connector = new NioSocketConnector(); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory())); connector.setHandler(adapter); ConnectFuture connFuture = connector.connect(new InetSocketAddress(server, port)); connFuture.awaitUninterruptibly(); session = connFuture.getSession(); }
Example 10
Source File: AbstractTcpClient.java From util with Apache License 2.0 | 5 votes |
/** * Create the UdpClient's instance */ public AbstractTcpClient() { connector = new NioSocketConnector(); connector.setHandler(this); ConnectFuture connFuture = connector.connect(new InetSocketAddress(getServerIp(), getServerPort())); connFuture.awaitUninterruptibly(); session = connFuture.getSession(); }
Example 11
Source File: MinaTimeClient.java From javabase with Apache License 2.0 | 5 votes |
public static void main(String[] args) { // 创建客户端连接器. NioSocketConnector connector = new NioSocketConnector(); connector.getFilterChain().addLast("logger", new LoggingFilter()); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))); // 设置编码过滤器 connector.setConnectTimeout(30); connector.setHandler(new TimeClientHandler());// 设置事件处理器 ConnectFuture cf = connector.connect(new InetSocketAddress("127.0.0.1", 9123));// 建立连接 cf.awaitUninterruptibly();// 等待连接创建完成 cf.getSession().write("hello");// 发送消息 cf.getSession().write("quit");// 发送消息 cf.getSession().getCloseFuture().awaitUninterruptibly();// 等待连接断开 connector.dispose(); }
Example 12
Source File: MinaClient.java From grain with MIT License | 5 votes |
/** * 守护,启动链接、断线重连 */ @Override public void run() { while (true) { Set<IoConnector> keySet = ioConnectorMap.keySet(); Iterator<IoConnector> iterator = keySet.iterator(); for (int i = 0; i < keySet.size(); i++) { IoConnector ioConnector = iterator.next(); InetSocketAddress inetSocketAddress = ioConnectorMap.get(ioConnector); boolean isConnected = ioConnectorStateMap.get(ioConnector); if (!isConnected) { ConnectFuture connectFuture = ioConnector.connect(inetSocketAddress); connectFuture.awaitUninterruptibly(); if (!connectFuture.isConnected()) { connectFuture.cancel(); if (MinaConfig.log != null) { MinaConfig.log.info("连接" + inetSocketAddress.toString() + "失败"); } } else { ioConnectorStateMap.put(ioConnector, true); if (MinaConfig.log != null) { MinaConfig.log.info("连接" + inetSocketAddress.toString() + "成功"); } } } } try { Thread.sleep(MinaClient.MINA_CLIENT_RECONNECT_INTERVAL); } catch (InterruptedException e) { if (MinaConfig.log != null) { MinaConfig.log.error("守护线程minaclient异常", e); } } } }
Example 13
Source File: AbstractClient.java From JobX with Apache License 2.0 | 5 votes |
public ConnectFuture getConnect(Request request) { connectLock.lock(); try { MinaConnectWrapper minaConnectWrapper = (MinaConnectWrapper) this.channelTable.get(request.getAddress()); if (minaConnectWrapper != null && minaConnectWrapper.isActive()) { return minaConnectWrapper.getConnectFuture(); } this.doConnect(request); ConnectFuture connectFuture = connector.connect(HttpUtils.parseSocketAddress(request.getAddress())); minaConnectWrapper = new MinaConnectWrapper(connectFuture); if (connectFuture.awaitUninterruptibly(Constants.RPC_TIMEOUT)) { if (minaConnectWrapper.isActive()) { if (logger.isInfoEnabled()) { logger.info("[JobX] MinaRPC getConnect: connect remote host[{}] success, {}", request.getAddress(), connectFuture.toString()); } this.channelTable.put(request.getAddress(), minaConnectWrapper); return connectFuture; } else { if (logger.isWarnEnabled()) { logger.warn("[JobX] MinaRPC getConnect: connect remote host[" + request.getAddress() + "] failed, " + connectFuture.toString(), connectFuture.getException()); } } } else { if (logger.isWarnEnabled()) { logger.warn("[JobX] MinaRPC getConnect: connect remote host[{}] timeout {}ms, {}", request.getAddress(), Constants.RPC_TIMEOUT, connectFuture); } } }finally { connectLock.unlock(); } return null; }
Example 14
Source File: MimaTimeClient.java From frameworkAggregate with Apache License 2.0 | 5 votes |
public static void main(String[] args) { IoConnector connector = new NioSocketConnector(); connector.getFilterChain().addLast("logger", new LoggingFilter()); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new PrefixedStringCodecFactory(Charset.forName("UTF-8")))); connector.setHandler(new TimeClientHander()); ConnectFuture connectFuture = connector.connect(new InetSocketAddress("127.0.0.1", PORT)); // 等待建立连接 connectFuture.awaitUninterruptibly(); System.out.println("连接成功"); IoSession session = connectFuture.getSession(); Scanner sc = new Scanner(System.in); boolean quit = false; while (!quit) { String str = sc.next(); if (str.equalsIgnoreCase("quit")) { quit = true; } session.write(str); } // 关闭 if (session != null) { if (session.isConnected()) { session.getCloseFuture().awaitUninterruptibly(); } connector.dispose(true); } }
Example 15
Source File: MinaUtil.java From seed with Apache License 2.0 | 5 votes |
/** * 发送TCP消息 * <p> * 当通信发生异常时(Fail to get session...),返回“MINA_SERVER_ERROR”字符串 * </p> * @param message 待发送报文的中文字符串形式 * @param ipAddress 远程主机的IP地址 * @param port 远程主机的端口号 * @param charset 该方法与远程主机间通信报文为编码字符集(编码为byte[]发送到Server) * @return 远程主机响应报文的字符串形式 */ public static String sendTCPMessage(String message, String ipAddress, int port, String charset){ IoConnector connector = new NioSocketConnector(); connector.setConnectTimeoutMillis(DEFAULT_CONNECTION_TIMEOUT); //同步的客户端,必须设置此项,其默认为false connector.getSessionConfig().setUseReadOperation(true); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ClientProtocolEncoder(charset), new ClientProtocolDecode(charset))); //作为同步的客户端,可以不需要IoHandler,Mina会自动添加一个默认的IoHandler实现(即AbstractIoConnector) //connector.setHandler(this); IoSession session = null; Object respData = null; try{ ConnectFuture connectFuture = connector.connect(new InetSocketAddress(ipAddress, port)); connectFuture.awaitUninterruptibly(); //等待连接成功,相当于将异步执行转为同步执行 session = connectFuture.getSession(); //获取连接成功后的会话对象 session.write(message).awaitUninterruptibly(); //由于上面已经设置setUseReadOperation(true),故IoSession.read()方法才可用 ReadFuture readFuture = session.read(); //因其内部使用BlockingQueue,故Server端用之可能会内存泄漏,但Client端可适当用之 //Wait until the message is received if(readFuture.awaitUninterruptibly(DEFAULT_BOTHIDLE_TIMEOUT, TimeUnit.SECONDS)){ //Get the received message respData = readFuture.getMessage(); }else{ LogUtil.getLogger().warn("读取[/" + ipAddress + ":" + port + "]超时"); } }catch(Exception e){ LogUtil.getLogger().error("请求通信[/" + ipAddress + ":" + port + "]偶遇异常,堆栈轨迹如下", e); }finally{ if(session != null){ //关闭IoSession,该操作是异步的,true为立即关闭,false为所有写操作都flush后关闭 //这里仅仅是关闭了TCP的连接通道,并未关闭Client端程序 //session.close(true); session.closeNow(); //客户端发起连接时,会请求系统分配相关的文件句柄,而在连接失败时记得释放资源,否则会造成文件句柄泄露 //当总的文件句柄数超过系统设置值时[ulimit -n],则抛异常"java.io.IOException: Too many open files",导致新连接无法创建,服务器挂掉 //所以:若不关闭的话,其运行一段时间后可能抛出too many open files异常,导致无法连接 session.getService().dispose(); } } return respData==null ? "MINA_SERVER_ERROR" : respData.toString(); }
Example 16
Source File: ClientPlayer.java From jforgame with Apache License 2.0 | 5 votes |
public void buildConnection() { NioSocketConnector connector = new NioSocketConnector(); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(SerializerHelper.getInstance().getCodecFactory())); connector.setHandler(new ClientHandler()); int serverPort = ServerConfig.getInstance().getServerPort(); System.out.println("开始连接游戏服务器端口" + serverPort); ConnectFuture future = connector.connect(new InetSocketAddress(serverPort)); future.awaitUninterruptibly(); IoSession session = future.getSession(); this.session = session; }
Example 17
Source File: TestReloadClassLoader.java From gameserver with Apache License 2.0 | 5 votes |
@Test public void testClassLoaderLeak2() throws Exception { int max = 10000; File sourceFile = new File(reloadSourceDir); URL[] urls = new URL[]{sourceFile.toURL()}; // ReloadProtocolCodecFilter filter = ReloadProtocolCodecFilter.getInstance( // GameServer.PROTOCOL_CODEC, GameServer.PROTOCOL_HANDLER, urls); SocketConnector connector = new NioSocketConnector(); // connector.getFilterChain().addLast("codec", filter); connector.setHandler(new ClientHandler()); //Send 1000 connections. try { for ( int i=0; i<Integer.MAX_VALUE; i++ ) { ConnectFuture future = connector.connect(new InetSocketAddress("localhost", 3443)); future.awaitUninterruptibly(); IoSession session = future.getSession(); IoBuffer buffer = IoBuffer.allocate(8); buffer.putShort((short)8); buffer.putShort((short)0); buffer.putInt(i); WriteFuture wfuture = session.write(buffer); wfuture.awaitUninterruptibly(); } } catch (Exception e) { e.printStackTrace(); fail(); } }
Example 18
Source File: CalculatorClient.java From mina with Apache License 2.0 | 4 votes |
@Override public void run() { IoConnector connector = new NioSocketConnector(); connector.setConnectTimeoutMillis(CONNECT_TIMEOUT);//设置连接超时时间(毫秒数) connector.getFilterChain().addLast("logger", new LoggingFilter()); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new CommandCodecFactory("UTF-8"))); KeepAliveMessageFactoryImpl kamfi = new KeepAliveMessageFactoryImpl(); KeepAliveFilter kaf = new KeepAliveFilter(kamfi, IdleStatus.READER_IDLE, KeepAliveRequestTimeoutHandler.CLOSE); /** 是否回发 */ kaf.setForwardEvent(true); connector.getFilterChain().addLast("heart", kaf); connector.setHandler(new CalculatorClientHander()); ConnectFuture connectFuture = connector.connect(new InetSocketAddress(IP, PORT)); //等待建立连接 connectFuture.awaitUninterruptibly(); if(!connectFuture.isConnected()){ log.debug("连接失败"); return ; } log.debug("连接成功"); IoSession session = connectFuture.getSession(); // try { // Cmd1003 cmd1003 = (Cmd1003) CommandFactory.createCommand(CidConst.C1003); // cmd1003.getReqMsg().setCpu(0.3f); // cmd1003.getReqMsg().setDisk(0.24f); // cmd1003.getReqMsg().setMemory(0.41f); // session.write(cmd1003); // } catch (Exception e) { // e.printStackTrace(); // } //关闭 if (session != null) { if (session.isConnected()) { session.getCloseFuture().awaitUninterruptibly(); } connector.dispose(true); } }
Example 19
Source File: MyClient.java From jlogstash-input-plugin with Apache License 2.0 | 4 votes |
public static void main(String[] args) { // 创建一个非组设的客户端客户端 IoConnector connector = new NioSocketConnector(); // 设置链接超时时间 connector.setConnectTimeoutMillis(30000); // 添加过滤器 connector.getFilterChain().addLast( // 添加消息过滤器 "codec", // Mina自带的根据文本换行符编解码的TextLineCodec过滤器 看到\r\n就认为一个完整的消息结束了 new ProtocolCodecFilter(new TextLineCodecFactory(Charset .forName("UTF-8"), LineDelimiter.MAC.getValue(), LineDelimiter.MAC.getValue()))); // 添加业务逻辑处理器类 connector.setHandler(new ClientMessageHandler()); IoSession session = null; try { ConnectFuture future = connector.connect(new InetSocketAddress( HOST, PORT)); future.awaitUninterruptibly(); // 等待连接创建完成 session = future.getSession(); long t1 = System.currentTimeMillis(); StringBuffer sb = new StringBuffer(); for(int i=0;i<200000;i++){ System.out.println(i); sb.append("ysqysq nginx_ccc [0050d2bf234311e6ba8cac853da49b78 type=nginx_access_log tag=\"mylog\"] /Users/sishuyss/ysq_access/$2016-04-05T11:12:24.230148+08:00/$100.97.184.152 - - [25/May/2016:01:10:07 +0800] \"GET /index.php?disp=dynamic HTTP/1.0\" 301 278 \"http://log.dtstack.com/\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;Alibaba.Security.Heimdall.1142964)\" 121.42.0.85 - - - 0").append(LineDelimiter.UNIX.getValue()); if(i%200==0){ session.write(sb.toString()); sb = new StringBuffer(); } } session.write(sb.toString()); System.out.println("time:"+(System.currentTimeMillis()-t1)); } catch (Exception e) { System.out.println(e.getCause()); logger.info("客户端链接异常..."); } session.getCloseFuture().awaitUninterruptibly(); logger.info("Mina要关闭了"); connector.dispose(); }
Example 20
Source File: WebSocketServerTest.java From red5-websocket with Apache License 2.0 | 4 votes |
public void connect() { try { ConnectFuture future = connector.connect(new InetSocketAddress(host, port)); future.awaitUninterruptibly(); session = future.getSession(); // write the handshake IoBuffer buf = IoBuffer.allocate(308); buf.setAutoExpand(true); buf.put("GET /default?encoding=text HTTP/1.1".getBytes()); buf.put(Constants.CRLF); buf.put("Upgrade: websocket".getBytes()); buf.put(Constants.CRLF); buf.put("Connection: Upgrade".getBytes()); buf.put(Constants.CRLF); buf.put(String.format("%s: http://%s:%d", Constants.HTTP_HEADER_ORIGIN, host, port).getBytes()); buf.put(Constants.CRLF); buf.put(String.format("%s: %s:%d", Constants.HTTP_HEADER_HOST, host, port).getBytes()); buf.put(Constants.CRLF); buf.put(String.format("%s: dGhlIHNhbXBsZSBub25jZQ==", Constants.WS_HEADER_KEY).getBytes()); buf.put(Constants.CRLF); buf.put("Sec-WebSocket-Version: 13".getBytes()); buf.put(Constants.CRLF); if (cookie != null) { buf.put(String.format("Cookie: monster=%s", cookie).getBytes()); buf.put(Constants.CRLF); } buf.put(Constants.CRLF); if (log.isDebugEnabled()) { log.debug("Handshake request length: {}", buf.limit()); } HandshakeRequest request = new HandshakeRequest(buf); session.write(request); // create connection WebSocketConnection conn = new WebSocketConnection(session); conn.setType(ConnectionType.WEB); conn.setConnected(); // add connection to client side session session.setAttribute(Constants.CONNECTION, conn); } catch (Exception e) { log.error("Connection error", e); } }