powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный танко-хакотон
25 сообщений из 316, страница 10 из 13
Тяпничный танко-хакотон
    #39156441
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
да погоди, в чатах там много не учитывается
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156443
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AddxвадяAddx,
почти полностью соглашусь, тут пока идет разговор общий, без конкретики, ознакомительный, поэтому воспринимать как основу не стоит, тем более ругать. просто предложения, их обоснования, плюсы/минусы. идеи (допускаются и глупые, глупыми могут оказаться только на первый взгляд)

Да я не ругаю, просто есть базовые вещи, которые нужно делать сразу. ИМХО. Я предложил простейший вариант, а mayton не согласен. Я считаю неправильным обрабатывать клавиши на сервере, а mayton против. Может кому-то показалось, что я как-то грубо высказался, или это наезд - прошу прощения, ничего такого не собирался делать.
Из опыта общения с мемберами и разработчиками TO.
Сервер не может обрабатывать все-все события от клиента. Более того в процессе
игры возможны временные отключения лаги и т.п. При этом танк остаётся функциональным.
Он сохраняет физику столкновений даже в offline статусе. Другие танки для него - временно
останавливаются. И не двигаются.

Это не потому-что - мой каприз. А проверено опытом других разработчиков.

Ключевый события такие как выстрелы и смерти - фиксируются. Фикисруются
клавиатурные нажатия т.к. они являются экстремальными точками на графиках
интерполяции координат движения.

И практически все-все игровые сервера не транслируют точные координаты игроков
а интерполируют их положения между ключевыми точками. Так работают Quake/CounterStrike.
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156446
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmayton,
да погоди, в чатах там много не учитывается
Хорошо. Погодю. Только ты там сильно не усердствуй.
Тоесть не стоит сейчас высыпать на мою бедную голову OVER 9000 строк кода. Потону.
Лучше меньше да лучше.
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156464
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Из опыта общения с мемберами и разработчиками TO.
Сервер не может обрабатывать все-все события от клиента. Более того в процессе
игры возможны временные отключения лаги и т.п. При этом танк остаётся функциональным.
Он сохраняет физику столкновений даже в offline статусе. Другие танки для него - временно
останавливаются. И не двигаются.

Это не потому-что - мой каприз. А проверено опытом других разработчиков.

Ключевый события такие как выстрелы и смерти - фиксируются. Фикисруются
клавиатурные нажатия т.к. они являются экстремальными точками на графиках
интерполяции координат движения.

И практически все-все игровые сервера не транслируют точные координаты игроков
а интерполируют их положения между ключевыми точками. Так работают Quake/CounterStrike.

Прости, но я уже даже боюсь отвечать, вдруг опять как наезд воспримется )
Во-первых, какие-такие все-все события от клиента ты увидел? У меня событий значительно меньше, чем нажатий на клавиши.
Насчет физики столкновений есть отдельные вопросы. Даже не буду сейчас обсуждать.
А последнее предложение я просто не понял. В плане кто кому что транслирует и кто интерполирует.
P.S. Мне сложно понять, в чем именно я не прав, если идут просто отсылки к разработчикам. Это открытая инфа, или получена в частных беседах?
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156467
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AddxПрости, но я уже даже боюсь отвечать, вдруг опять как наезд воспримется )
Во-первых, какие-такие все-все события от клиента ты увидел? У меня событий значительно меньше, чем нажатий на клавиши.
Насчет физики столкновений есть отдельные вопросы. Даже не буду сейчас обсуждать.
А последнее предложение я просто не понял. В плане кто кому что транслирует и кто интерполирует.
P.S. Мне сложно понять, в чем именно я не прав, если идут просто отсылки к разработчикам. Это открытая инфа, или получена в частных беседах?
Отложим на потом. Щас это еще неактуально.
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156479
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
как начало
ws предлагает только транспорт, нам же надо передать многое.
поэтому (как я объяснял выше) передаваемое разделяем на две части
команда и данные , это как основа
при получении разделяем команду от данных.
чтоб выполнить команду надо с помощью if, case, или рефлексии найти/задать метод для этой команды. т.к. таких команд может быть 1000+, то case, if не подходят.
остаётся рефлексия. иметь 1000+ методов в одном файле тоже не айс. методы группируем в логические группы в отдельных java файлах . для удобства обработки кладём в одну «папку» . в синглтоне производим загрузку в лист имена методов из этих файлов.
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156527
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
    var con;
    var rg = /^([a-z_0-9.]{1,})\|([\s\S]*)/;
   
        con = new WebSocket("wss://<%=Singleton.getServerWSS() + ":" + Singleton.getPortWSS()%>");    
        con.binaryType = "arraybuffer";
        con.onopen = function (e) {
 
            con.send('auth|<%=request.getSession().getAttribute("token")%>~<%= session.getId()%>');
//команда auth - привязывает данное подключение ws к сесси и имени юзера, несет две функции: защищает сервер от
//сторонних подключений (на сервере проверяется есть ли у ws разрешение ) и для рассылку сообщений конкретному юзеру по имени
        };
        con.onmessage = function (response) {
//проверяется тип данных
            if (typeof (response.data) === 'string') {
//из сообщения выделяется команда и данные
                var r = rg.exec(response.data);
                try {

                    if (r[1].includes('.')) {//для запуска  "сложных вызовов функций" 
                        var d = r[1].split('.');
                        window[d[0]][d[1]](r[2]);
                    } else {          // основное использование - для "простых функций"
//в r[1] имя функции
//в к[2] данные
                        window[r[1]](r[2]);
                    }
                } catch (er) {
                    console.log('ошибка ' + er.stack);
                    console.log('вызов ' + r[1]);
                    console.trace();

                }
            } else {
//для обработки бинарных данных
//                var uInt8Array = new Uint8Array(response.data); 
//                var arrayBuffer = response.data;
//                var bytes = new Uint8Array(arrayBuffer);
//                console.log(bytes);
//                yyy45();
            }
        };
        con.onclose = function (event) {
            if (event.wasClean) {
                console.log('Соединение закрыто чисто');
            } else {
                console.log('закрытие');
            }
            console.log('Код: ' + event.code + ' причина: ' + event.reason);
        };
        con.onerror = function (error) {
            console.log("Ошибка wss " + error.message);
        };
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156534
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
window[r[1]](r[2]); - "рефлексия" для javascript
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156553
https://playcanvas.com

Вот отличное место для разработки WebGL прототипа поиграться.
Там кстати есть и танчики. Пример клиента.
https://playcanvas.com/project/332521/overview/tankys
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156559
вадяmayton,
как начало
ws предлагает только транспорт, нам же надо передать многое.
поэтому (как я объяснял выше) передаваемое разделяем на две части
команда и данные , это как основа
при получении разделяем команду от данных.
чтоб выполнить команду надо с помощью if, case, или рефлексии найти/задать метод для этой команды. т.к. таких команд может быть 1000+, то case, if не подходят.
остаётся рефлексия. иметь 1000+ методов в одном файле тоже не айс. методы группируем в логические группы в отдельных java файлах . для удобства обработки кладём в одну «папку» . в синглтоне производим загрузку в лист имена методов из этих файлов.
Какой дикий ужас... на реалтайм сервере, где каждая милисекунда на счету, лазить рефлексией в поисках метода...
И кстати, почему If не подходит-то? у него ограничения чтоли есть? ))
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156579
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищущий Знания Какой дикий ужас... на реалтайм сервере, где каждая милисекунда на счету, лазить рефлексией в поисках метода...
И кстати, почему If не подходит-то? у него ограничения чтоли есть? ))
ужас в том , что с таким ником ты отстал лет на 10...
посмотри лекции первоисточников.
рефлексия давно уже не такая медленная, как была в те времена из которых ты не можешь выйти.
по if:
ограничений нет, но пройти по цепочки из 1000+ if в рантайме ....
для добавления/удалени метода нада залесть в if, найти ...
для добавления/удалени метода нада сделать два исправления/добавления - в блоке if, и в самом классе, где добавляется метод
при рефлексии - только добавить /изменить сам метод
и для командной разработки иметь один файл , который правят несколько прогеров - не есть хорошо,
при рефлексии (повторюсЬ) файлы содержащие методы раздаются прогерам и каждый из них не зависит от остальных.
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156584
вадяпри рефлексии (повторюсЬ) файлы содержащие методы раздаются прогерам и каждый из них не зависит от остальных.
Серьезно?? Рефлексия раздает файлы прогерам?
Ты сделал мой день... Давно так не смеялся)) Жги еще
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156590
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не претендую на что-то сверхновое.
но при таком подходе стоимость обращения к серверу очень и очень маленькая, поэтому можно возлагать на сервер новые функции.
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156599
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищущий Знаниявадяпри рефлексии (повторюсЬ) файлы содержащие методы раздаются прогерам и каждый из них не зависит от остальных.
Серьезно?? Рефлексия раздает файлы прогерам?
Ты сделал мой день... Давно так не смеялся)) Жги еще
дак ты ещё и мыслить не умеешь...
не рефлексия раздаёт файлы , а система разработки , подход к разделению работы выделяет прогеру некоторый фай, в котором есть все методы за которые он отвечает, и ему не надо править всё остальное. рефлексия просто позволяет выделить группу методов в один файл.
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156650
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги. Я прошу вас не зафлуживать этот топик спором о скорости рефлексии.
Честно. Я этому моменту уделю максимум 1-2 минуты. Тоже самое касается протоколов ws, wss.
На данный момент задача - собрать работающий макет. И нет смысла спорить
о мелких оптимизациях.

В ближайшее время я выкачу спеку. Там будет условно. Описание стурктуры клиента и сервера.
И формальное (табличкой) описание команд взаимодействия. В обе стороны.

Я сознательно сейчас ухожу от споров на тему csv/json, ws/wss, рефлекция-нерефлексия.
Это щас не имеет никакого значения. Это вторично.

Прошу вас также не DDOS-ить меня ссылками на огромные статьи и публикации.
У меня не хватает времени прочитать своё. Но если вы с осознанием сделаете
краткий реферат - типа пункт 1 - надо сделать тото и тото потомучто - я буду благодарен.

Прошу вас - цените моё время.
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156679
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадя. Правильно-ли я понимаю что в данном исходнике ты предлагаешь несколько идей.

1) Использовать шифро-соединение.
2) Усилить (зачем-то) сервер от "сторонних подключений".
3) Использовать возможноть с сервера вызывать произвольный Java-код (по аналогии с eval(...))

вадя
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
        con = new WebSocket("wss://<%=Singleton.getServerWSS() + ":" + Singleton.getPortWSS()%>");    
.....
            con.send('auth|<%=request.getSession().getAttribute("token")%>~<%= session.getId()%>');
//команда auth - привязывает данное подключение ws к сесси и имени юзера, несет две функции: защищает сервер от
//сторонних подключений (на сервере проверяется есть ли у ws разрешение ) и для рассылку сообщений конкретному юзеру по имени
        };
        con.onmessage = function (response) {
//проверяется тип данных
            if (typeof (response.data) === 'string') {
//из сообщения выделяется команда и данные
                var r = rg.exec(response.data);
                try {

                    if (r[1].includes('.')) {//для запуска  "сложных вызовов функций" 
                        var d = r[1].split('.');
                        window[d[0]][d[1]](r[2]);
                    } else {          // основное использование - для "простых функций"
//в r[1] имя функции
//в к[2] данные
                        window[r[1]](r[2]);
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156730
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton3) Использовать возможноть с сервера вызывать произвольный Java-код (по аналогии с eval(...))


конечно, у некоторых особо шустрые машинки, можно их попутно расчётом биткоинов притормозить - должен же проект на что-то жить в будущем :-)

ps: JavaScript -код
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156749
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВадя. Правильно-ли я понимаю что в данном исходнике ты предлагаешь несколько идей.

1) Использовать шифро-соединение.
2) Усилить (зачем-то) сервер от "сторонних подключений".
3) Использовать возможноть с сервера вызывать произвольный Java-код (по аналогии с eval(...))
1) да по 3 причинам - проходит везде через прокси, - тенденция к переходу на шфрование трафика, - использует сжатие
2) подключение ws на сервере обеспечивает слушатель порта, фактически ничем не связанный с сервлетам.
поэтому порту можно просто подсоединиться не заходя в браузер, и произвести взлом. это не усиление, а простая защита.
3) да, но не совсем так, вызвать функцию и передать ей данные. функция будет работать быстрее, чем код в eval
по ws можно передать любой текст , в том числе и dom элемент, <script>, в котром может быть всё, что угодно.
фактически можно строит страницу с сервера, передавая ей dom элементы.
к примеру - подключился новый игрок, встроили в страницу необходимое для его работы. прямо в работающий процесс.

данный исходник встраивается на каждую страницу. он по сути является загрузчиком контента страницы.

аналогичное можно реализовать и ajax, но только по запроса с клиента....
можно так же вызавать такое (sss) ("сложный вызов" :) ) из
var v={
ddd:9,
sss:function(f,g){}
}
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156751
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)mayton3) Использовать возможноть с сервера вызывать произвольный Java-код (по аналогии с eval(...))


конечно, у некоторых особо шустрые машинки, можно их попутно расчётом биткоинов притормозить - должен же проект на что-то жить в будущем :-)

ps: JavaScript -код
+1000
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156766
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть
Код: javascript
1.
2.
3.
4.
5.
var v;

function sss1(t){
v=t;
}


передаём строку"sss1|{ddd:9,sss:function(f){}}"

она присваевет перменной v 'это {ddd:9,sss:function(f,g){}}

передаём "ddd.sss|556"
должна вызваться функция sss c параметром 556
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156813
вадяесть
Код: javascript
1.
2.
3.
4.
5.
var v;

function sss1(t){
v=t;
}


передаём строку"sss1|{ddd:9,sss:function(f){}}"

она присваевет перменной v 'это {ddd:9,sss:function(f,g){}}

передаём "ddd.sss|556"
должна вызваться функция sss c параметром 556
Это пздц товарищи. Предлагаю даже не рассматривать такой говнокод.
Передавать сфункцию которая будет выполнятся это полный финиш.
Который если только для говносайтов подходит.

В реалтайм играх каждый байт на счету.
Передавать надо только код команды и необходимые данные для нее.
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156868
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищущий Знания,
ты дурак или только прикидываешься?
я показываю возможности. данный код не обязателен для использования в данном проекте, но може в сумме оказаться выгоднее чего-то другого.
я говорю о минимуме служебной информации в ws - ты ругаешь,
и тут же говоришь о экономиии байт.
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156878
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя1) да по 3 причинам - проходит везде через прокси, - тенденция к переходу на шфрование трафика, - использует сжатие

Вадя. У меня сейчас тестовое окружение - это ноутбук или два ноута или ноут с виртуалкой.
Я не вижу никакой обоснованной потребности в сжатии или шифровании. Лучше исходить из
принципа - "дорогА ложка к обеду". А возможность переключения на wss мы заложим
в конфиг. Тоесть изначально будет ws, потом wss если владелец ресурса посчитает
это полезным.

А игроки сидящие за прокси... ну.. честно говоря они как целевая аудитория мне неинтересны.

2) подключение ws на сервере обеспечивает слушатель порта, фактически ничем не связанный с сервлетам.
поэтому порту можно просто подсоединиться не заходя в браузер, и произвести взлом. это не усиление, а простая защита.

Я возьму это на карандашик. Не обещаю что сразу но со временем заимплементим.

3) да, но не совсем так, вызвать функцию и передать ей данные. функция будет работать быстрее, чем код в eval
по ws можно передать любой текст , в том числе и dom элемент, <script>, в котром может быть всё, что угодно.
фактически можно строит страницу с сервера, передавая ей dom элементы.
к примеру - подключился новый игрок, встроили в страницу необходимое для его работы. прямо в работающий процесс.

данный исходник встраивается на каждую страницу. он по сути является загрузчиком контента страницы.

аналогичное можно реализовать и ajax, но только по запроса с клиента....

Если честно... мне это кажется неоправданным усложнением игрового интерфейса клиента.

И я не вижу чем этот универсализм будет полезен. Учитывая что постака (delivery) новых релизов
будет совершенно прозрачна с точки зрения пользователя (еще раз забить адрес в строке браузера)
совершенно нет необходимости делать его настолько универсальным.

Мне-же как не сильно скиллованному JavaScript-кодеру хотелось-бы чтобы код имел просто
пускай даже "деревянный" вид. Тоесть без усложнений.
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156887
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 согласен
2 делается просто, сложно потом переделать. настаиваю, хотя б из-за возможности привязать имя юзера подключению, предлагаю поверить практике.
3 описаны возможности, может и пригодится, а может и нет
основное - запуск функции по имени, а уж без этого - использовать if?
...
Рейтинг: 0 / 0
Тяпничный танко-хакотон
    #39156889
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что толку в простой передача данных клиенту?
надо их как-то обработать, в одном случае - вставить слово в поле, в другом - добавить поле, строку.
таких мелких команд море, не запрашивать же для этого страницу?
...
Рейтинг: 0 / 0
25 сообщений из 316, страница 10 из 13
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный танко-хакотон
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]