Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.08.2016, 20:44
AlexSave вне форума Посмотреть профиль Отправить личное сообщение для AlexSave Найти все сообщения от AlexSave
  № 1  
Ответить с цитированием
AlexSave

Регистрация: Dec 2006
Сообщений: 24
По умолчанию Java socket

Пытаюсь подключить флеш as3 к java через сокет. Связь есть, но в момент отключения игрока он не всегда удаляется из массива игроков.
Вкратце: в java для каждого нового игрока создаю новый поток и добавляю его в ArrayList. Удаление из массива происходит в момент срабатывания исключения (когда игрок закрывает флешку и связь пропадает). Но через какое то время элементов в ArrayList становится явно больше, чем должно быть. Хотя когда тестирую сам, все работает правильно.

Вот такой вот скрипт (в яве совсем новичок). Скрипт в ответ на любой запрос клиента отвечает размером ArrayList.

JAVA
Код AS3:
public class Server { 
	private static final int PORT_SERVER = 2000;	
	static List<Player> mas_player = new ArrayList<Player>();	
 
	public static void main(String[] args) {
		try {
			ServerSocket server = new ServerSocket(PORT_SERVER);			
 
			while(true) {
				Socket clientSocket = server.accept();				
				Player client = new Player(clientSocket, mas_player);
				mas_player.add(client);
				client.start();
			}
		} catch(Exception e) {System.out.println("Error init "+e);}
	} 
}
 
class Player extends Thread {
	public Socket s;
	DataInputStream in;
	DataOutputStream out;
	List<Player> mas_player;   
 
	public Player(Socket p1, List<Player> mas_player) {
		s = p1;
		this.mas_player = mas_player;
	}
 
	public void run() {
		String line = null;
		try {
			InputStream sin = s.getInputStream();
			OutputStream sout = s.getOutputStream();
			in = new DataInputStream(sin);
			out = new DataOutputStream(sout);
 
			while(true) {
				line = in.readUTF();
				line = String.valueOf(mas_player.size());				  
				out.writeUTF(line);
				out.flush();
			}
		} catch(Exception e) {			
			try {
				mas_player.remove(this);
				out.close();
				s.close();
			} catch(Exception ee) {
				System.out.println("Error thread "+ee);
			}
		}
	}
}

Старый 17.08.2016, 00:17
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 2  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
а почему слушаете именно исключение? Это вполне штатная ситуация и в конце сессии клиент должен передавать end

Старый 17.08.2016, 06:01
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Это вполне штатная ситуация и в конце сессии клиент должен передавать end
Сессия может (и чаще всего так и бывает) завершиться не штатно: закрыл страницу в браузере, отрубился интернет, вырубили электричество, разбил комп в препадке гнева Оо. Так что отключение клиента в любом случае должен разруливать сервер.

Уже давно придуманы механизмы проверки участия клиента. Самый простой вариант - heart_beat. Раз в определенный интервал времени, к примеру секунда, клиент и сервер обмениваются "сердцебиением", то есть просто короткое сообщение (любое, я всегда слал просто hb, чтобы было понятно), и если клиент прислал серверу ответ на его запрос hb, то сервер считает, что клиент онлайн и не отключает его.
Может возникнуть ситуация задержки в сети, поэтому сервер, если не получил ответ, должен еще какое-то время подждать. Если этот таймаут истек, и ответ так и не получен, значит клиент отключился и нужно удалить его из списка активных.
Рассчитывать на Exception глупо, сервер может считать, что клиент не отключился и держать его в своем списке как нормального
__________________
Ко мне можно и нужно обращаться на ты)

Старый 17.08.2016, 08:05
AlexSave вне форума Посмотреть профиль Отправить личное сообщение для AlexSave Найти все сообщения от AlexSave
  № 4  
Ответить с цитированием
AlexSave

Регистрация: Dec 2006
Сообщений: 24
Видимо, так и сделаю, спасибо! И всё же странно, что Exception срабатывает, грубо говоря, в 90% случаях или даже чаще, а иногда нет.

Старый 17.08.2016, 09:10
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Не за что)
В том, что эксепшен срабатывает как попало нет ничего странного, это же джава. В джаве вообще многое как попало работает. У меня была реалтайм игра с сервером на джаве, я себе все нервы чуть не потратил, пока для него модули делал
__________________
Ко мне можно и нужно обращаться на ты)

Старый 17.08.2016, 10:12
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 6  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
Немного не в тему, делал так же сокет на с#.NET+моно, тоже пихал код сокетов из примеров, постоянно были какие то мелкие глючки и невнятности в работе. Пока не заюзал либу SuperSocket, всё сразу вылечилось и встало на свои места. Причем судя по внутренностям, самому такой код написать нереально выделив даже ближайший год. Наверняка под яву есть подобные решения.

Старый 17.08.2016, 17:11
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от ShockWave512 Посмотреть сообщение
Немного не в тему, делал так же сокет на с#.NET+моно, тоже пихал код сокетов из примеров, постоянно были какие то мелкие глючки и невнятности в работе. Пока не заюзал либу SuperSocket, всё сразу вылечилось и встало на свои места. Причем судя по внутренностям, самому такой код написать нереально выделив даже ближайший год. Наверняка под яву есть подобные решения.
К слову о джаве. Даже оракловская netbeans страшно глючная IDE, которая еще и очень долго грузится. Написана на джаве. Для меня лично плюс джавы был в том, что синтаксис очень похож на as3, и было не сложно учить. В остальном, тормозной глючный язык с кучей совершенно нелепых эксепшенов.
__________________
Ко мне можно и нужно обращаться на ты)

Старый 17.08.2016, 17:43
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 8  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
С netbeans не сталкивался, андроид студио и джейайдеа вроде ниче, не заметил там глюков

Старый 17.08.2016, 18:43
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от ShockWave512 Посмотреть сообщение
С netbeans не сталкивался, андроид студио и джейайдеа вроде ниче, не заметил там глюков
Андроид студио и айдиа это одно и то же практически. Тоже глючная и тормозная. В андроид студио часто возникают баги такого рода: обновляешь лейаут xml, начинает выдавать кучу непонятных ошибок на ровном месте. Перезапускаешь ide, у вуаля, никаких ошибок. Бывает не загружает превью девайсов. Ну, о том, что она в целом далеко не самая шустрая, говорить нет смысла.
Конечно если писать код все время в idea и потом открывать андроид студио, то кажется, что все норм, но я сравниваю с FD и MS Visual Studio. Последняя, кстати, несмотря на свои огромные размеры, работает на удивление быстро и хорошо, лично для меня, писать в VS одно удовольствие, чего не могу сказать об андроид студио
__________________
Ко мне можно и нужно обращаться на ты)

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:24.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.