Страницы

Поиск по вопросам

четверг, 26 декабря 2019 г.

Как правильно написать сервер на сокетах?

#java


public static void main(String[] args) throws IOException {
    playerses = new ArrayList<>();
    serverSocket = new ServerSocket(7475);
    while (true) {
        Socket socket = serverSocket.accept();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    while (true) {
                        String asd = new BufferedReader(new InputStreamReader(socket.getInputStream())).readLine();
                        System.out.println(asd);
                    }
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}


Нужно сделать так, чтобы сервер после того, как к нему подключится клиент по сокету,
начинал его слушать.

while(true) - это не плохой код? На производительность влиять не будет? Память потребляет,
питание на ноутбуке ест? Или есть другой способ?
    


Ответы

Ответ 1



Не вижу ничего особенно плохого в вашем коде. Написание собственного велосипедного сервера — шаг, через который стоит пройти. Из минусов — выделение потока на каждый клиент. Это потенциально приведёт к невозможности обработки, скажем, 10000 клиентов одновременно. В братском .NET проблема решается при помощи паттерна async/await, в Java, судя по всему, вам придётся поддерживать состояние работы с каждым из клиентов вручную. Затем, если ваш сервер на деле использует более высокоуровневый протокол (HTTP?) имеет смысл воспользоваться готовым клиентом, правильный разбор высокоуровневых сложных протоколов — та ещё задача. Хотя да, этот клиент будет делать по сути примерно то же самое.

Комментариев нет:

Отправить комментарий