elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  ¿Cómo puede ser que utilize el 100% de CPU?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo puede ser que utilize el 100% de CPU?  (Leído 1,458 veces)
BI0N1C

Desconectado Desconectado

Mensajes: 1


Ver Perfil
¿Cómo puede ser que utilize el 100% de CPU?
« en: 29 Noviembre 2014, 10:45 am »

Buenas, hace tiempo que ando queriendo desarrollar un sistema asincrónico de sockets en java, pero siempre veía que era una *****, y acababa usando lo típico, como netty o xSockets.

Pero hace días estoy desarrollando un servidor, y quiero que sea totalmente mío (Ya que ahí recibo el pago por ser todo mio), y desarrollé un pequeño sistema, pero este sistema ocupa el 100% de CPU, así que si alguien puede decirme que mejorarle, o que puedo hacer...


SocketListener.java:

Código:
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousServerSocketChannel;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.CompletionHandler;


public class SocketListener {
    private IConnectionHandler connectionHandler;
    private AsynchronousServerSocketChannel asyncServerSocketChannel = null;

    public SocketListener() throws Exception {
        this.asyncServerSocketChannel = AsynchronousServerSocketChannel.open();
        this.asyncServerSocketChannel.bind(new InetSocketAddress(FINAL.SOCKET_PORT));
        this.asyncServerSocketChannel.accept(null, new CompletionHandler<AsynchronousSocketChannel, Object>() {
            @Override
            public void completed(AsynchronousSocketChannel ch, Object att) {
                asyncServerSocketChannel.accept(null, this);

                handle(ch);
            }
            @Override
            public void failed(Throwable exc, Object attachment) {
                connectionHandler.onException((Exception)exc);
            }
        });
    }

    private void handle(AsynchronousSocketChannel asyncSocketChannel) {
        this.connectionHandler = new SocketHandler();
        this.connectionHandler.onConnect(asyncSocketChannel);
        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);

        try {
            while (asyncSocketChannel.read(byteBuffer).get() != -1) {
                this.connectionHandler.onMessageReceived(byteBuffer.array());
                byteBuffer = ByteBuffer.allocate(1024);
            }
        } catch(Throwable exc){
            this.connectionHandler.onException((Exception)exc);
        }
        this.connectionHandler.onDisconnect(asyncSocketChannel);
        byteBuffer = null;
    }
}


IConnectionHandler.java:
Código:
import java.nio.channels.AsynchronousSocketChannel;

public interface IConnectionHandler {
    public void onConnect(AsynchronousSocketChannel asyncSocketChannel);
    public void onDisconnect(AsynchronousSocketChannel asyncSocketChannel);
    public void onMessageReceived(byte[] messageFromClient);
    public void onException(Exception exceptionFromClient);
}


SocketHadler.java:
Citar
import java.nio.channels.AsynchronousSocketChannel;

public class SocketHandler implements IConnectionHandler {

    private AsynchronousSocketChannel asynSocketChannel;

    @Override
    public void onConnect(AsynchronousSocketChannel asynSocketChannel){
        this.asynSocketChannel = asynSocketChannel;
        PartyBang.printWarning(SocketHandler.class, "New Connection Handled!");
    }
    @Override
    public void onDisconnect(AsynchronousSocketChannel asynSocketChannel){
        // dispose all
        this.asynSocketChannel = null;
        PartyBang.printWarning(SocketHandler.class, "Connection Refused!");
    }
    @Override
    public void onMessageReceived(byte[] messageFromClient){
        System.out.println(new String(messageFromClient));
    }
    @Override
    public void onException(Exception exceptionFromClient){
        System.err.println(exceptionFromClient);
    }
}


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Cómo se puede...
Multimedia
Zedmix 6 2,074 Último mensaje 15 Abril 2006, 17:28 pm
por Sourraund
se puede crakear server de COD2?? y si es que se puede como??
Juegos y Consolas
xXxjoakoxXx 0 1,497 Último mensaje 4 Febrero 2008, 02:21 am
por xXxjoakoxXx
Cómo te espía Google y cómo se puede evitar
Noticias
wolfbcn 0 1,633 Último mensaje 3 Junio 2014, 18:21 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines