Страницы

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

четверг, 29 ноября 2018 г.

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

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) - это не плохой код? На производительность влиять не будет? Память потребляет, питание на ноутбуке ест? Или есть другой способ?


Ответ

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

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

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