Суббота, 2025-02-08, 03:38:42
Главная Регистрация RSS
Приветствую Вас, Гость
Форма входа
Мини-чат
Главная » 2012 » Март » 5 » Идеи по реализации JAVA Socket
16:34:29
Идеи по реализации JAVA Socket
 
На первый взгляд самый простой способ обмена сообщениями между сервером и клиентом, например чата, - через сокеты.

Что нам нужно:
Создаём сокет на сервере, слушающий на 8888 порту.
Code
ServerSocket server = new ServerSocket(8888);  
Socket socket = server.accept();  
System.out.println("Server accepted connection");  
Thread.sleep(60000);  
socket.close();
server.close();

Создаем на клиенте сокет подключающийся к 8888 порту сервера.
Code
Socket client = new Socket("localhost", 8888);  
OutputStream os = client.getOutputStream();  
os.write(new byte[256]);  
System.out.println("Client succesfully wrote message");  
os.close();  
client.close();  
System.out.println("Client succesfully closed connections");

Таким образом на клиенте мы вызываем синхронный метод записи в сокет, успешно закрываем соединение и идем работать дальше, будучи уверенными, что наше сообщение доставлено. Сервер, кстати, в примере выше, тоже не получит никакой ошибки, так и не считав отправленное ему сообщение. Т.е. как мы видим никакой гарантии, что сервер зачитал наше сообщение, а тем более корректно его обработал нет.
Чтобы таких проблем не возникало, необходимо работать по схеме request-response. Т.е. после оправки сообщения клиентом, надо дождаться некоторого ответа от сервера, который должен быть послан программно.
Кроме решения задач с многопочностью, восстановлением соединения, потерянными пакетами, переполнении буферов, очереди сообщений, все эти ошибки нужно как-то обработать!
Есть альтернативное решение - не использовать сокеты вообще !
Использовать запись/чтение в базу данных MySQL, при этом мы решим сразу массу проблем:
- рост производительность при эквивалентных затратах на разработку
- вся история будет храниться в базе данных
- масштабируемость проекта

Но если вам все таки удобно пользоваться механизмами сокетов, стоит обратить внимание на готовые решения и не использовать велосипед: Apache Qpid, StormMQ, ZeroMQ.
Просмотров: 1317 | Добавил: CHerry
Всего комментариев: 2
1 alex  
0
что за бред? С каких пор 1111=8888?

2 CHerry  
0
Спасибо. Поправил.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]