java游戏级别的实时性较高的网络通信,如何实现?

我用原生的TCP Socket,会不定时的丢包然后重传导致粘包。用UDP Socket,丢包更严重,几秒就丢一次,数据传输不流畅。怎么破?

你见过有用java开发的商业游戏么?

把部分代码贴上,求各位指导
这是服务器接收部分
public void startServer() {
new Thread() {
@Override
public void run() {
super.run();
try {
flag = true;
mServerSocket = new ServerSocket(mServerPort);
while (flag) {
Socket clientSocket = mServerSocket.accept();
mSockets.add(clientSocket);
String hostAddress = clientSocket.getInetAddress().getHostAddress();
int localPort = clientSocket.getLocalPort();
Log.d(TAG, "startServer: ip->" + hostAddress + ",port->" + localPort);
mServerCallback.clientConnected();

                    SocketThread socketThread = new SocketThread(clientSocket);
                    socketThread.start();
                    mClients.add(socketThread);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                closeServer();
            }
        }
    }.start();
}

这是服务器处理客户端部分
/**
* 客户端线程
*/
private class SocketThread extends Thread {

    private Socket mClientSocket;
    private BufferedReader mBufferedReader;
    private PrintStream mPrintStream;

    public SocketThread(Socket clientSocket) {
        mClientSocket = clientSocket;
    }

    @Override
    public void run() {
        super.run();
        try {
            mPrintStream = new PrintStream(mClientSocket.getOutputStream(), true, "UTF-8");
            mBufferedReader = new BufferedReader(new InputStreamReader(mClientSocket.getInputStream(), "UTF-8"));
            MyApplication.sCurActivity.remoteMode();//向客户端发送当前遥控模式
            while (flag) {
                if (mBufferedReader.ready()) {
                    String readLine = mBufferedReader.readLine();
                    Log.d(TAG, "accept: "+readLine);
                    if (String.valueOf(CLIENT_STOP).equals(readLine)) {
                        break;
                    }
                    mServerCallback.accept(readLine);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

// sendStopMessage();
try {
if (mPrintStream != null) {
mPrintStream.close();
}
if (mBufferedReader != null) {
mBufferedReader.close();
}
if (mClientSocket != null) {
mClientSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
mSockets.remove(mClientSocket);
mClients.remove(this);
}
}

    /**
     * 向客户端发送关闭标识
     */
    private void sendStopMessage() {
        mPrintStream.println(String.valueOf(SERVER_STOP));
    }
}

用nio就可以实现高性能网络通信

Mina、Netty、Grizzly