• Unity не видит disconnect от сервера, если его вызывает другой Unity, есть идеи?

    AlexMcArrow
    @AlexMcArrow
    itrushkoff, я так же не знаю, но как мне показалось socket.io для unity у вас внешняя библиотека (а не стандартное решение от Unity) - может посмотреть другие библиотеки?
    https://github.com/sta/websocket-sharp
  • Unity не видит disconnect от сервера, если его вызывает другой Unity, есть идеи?

    AlexMcArrow
    @AlexMcArrow
    itrushkoff, я пытался воспроизвести вашу проблему. К сожалению с Unity не знаком и проверить не смогу.
    Лишь указал - что примитив сервера жизнеспособен и при работе с клиентом на nodejs подобная проблема не воспроизводится.

    Можно только предполагать что есть различие в реализации на сетевом уровне между NodeJS и C#
  • Unity не видит disconnect от сервера, если его вызывает другой Unity, есть идеи?

    AlexMcArrow
    @AlexMcArrow
    itrushkoff, накидал примитив клиента на nodejs

    const
        io = require("socket.io-client"),
        socket = io.connect("http://localhost:52300");
    
    socket.on('connect', function () { });
    socket.on('register', function (data) {
        console.log('register', data)
    });
    socket.on('spawn', function (data) {
        console.log('spawn', data)
    });
    socket.on('rdisconnected', function (data) {
        console.log('rdisconnected', data)
    });
    socket.on('disconnect', function () { });


    С ним проблем не наблюдаю.
    Логи:
    Сервер:
    node index.js
    Server has started
    Connection made!
    Connection made!
    Player is disconnected

    Клиент 1:
    node client.js
    register { id: 'FBNGnJmtL' }
    spawn { username: '', id: 'FBNGnJmtL' }
    spawn { username: '', id: '9OSWgSnQ1' }
    rdisconnected { username: '', id: '9OSWgSnQ1' }

    Клиент 2 (он зашел и вышел):
    node client.js
    register { id: '9OSWgSnQ1' }
    spawn { username: '', id: '9OSWgSnQ1' }
    spawn { username: '', id: 'FBNGnJmtL' }
  • Unity не видит disconnect от сервера, если его вызывает другой Unity, есть идеи?

    AlexMcArrow
    @AlexMcArrow
    Хм. я походу упустил момент - "что сервер отправляет, а клиенты не получают".
    Можно попросить у вас примитив класса Player, в части его инициализации (что бы player.id был - остальное можно удалить) - что бы воспроизвести вашу проблему у себя.
    И предлагаю попробовать убрать удаление - и посмотреть получают клиенты сообщения или нет.
  • Unity не видит disconnect от сервера, если его вызывает другой Unity, есть идеи?

    AlexMcArrow
    @AlexMcArrow
    itrushkoff, бред какой-то, но:
    замените объявление на такое
    var players = {};
    var sockets = {};
  • Unity не видит disconnect от сервера, если его вызывает другой Unity, есть идеи?

    AlexMcArrow
    @AlexMcArrow
    Прогнал ваш код через SonarLint
    =================================
    "delete" should not be used on arrays (javascript:S2870)
    CODE_SMELL Code Smell MAJOR Major
    The delete operator can be used to remove a property from any object. Arrays are objects, so the delete operator can be used here too, but if it is, a hole will be left in the array because the indexes/keys won't be shifted to reflect the deletion.

    The proper method for removing an element at a certain index would be:

    Array.prototype.splice - add/remove elements from the array
    Array.prototype.pop - add/remove elements from the end of the array
    Array.prototype.shift - add/remove elements from the beginning of the array
    Noncompliant Code Example
    var myArray = ['a', 'b', 'c', 'd'];

    delete myArray[2]; // Noncompliant. myArray => ['a', 'b', undefined, 'd']
    console.log(myArray[2]); // expected value was 'd' but output is undefined
    Compliant Solution
    var myArray = ['a', 'b', 'c', 'd'];

    // removes 1 element from index 2
    removed = myArray.splice(2, 1); // myArray => ['a', 'b', 'd']
    console.log(myArray[2]); // outputs 'd'

    =====================================
    Полагаю это может быть вашей проблематикой.
  • Как из NodeJS получить доступ к файлу на удаленной машине для обработки его модулем Tail?

    AlexMcArrow
    @AlexMcArrow
    FTP - такое вам не позволит.
    Попробуйте посмотреть в сторону sshfs - но думаю что будет очень большой лаг.
    Если вам нужно прочитать лог на одном сервере и передать данные на другой - делайте это локально.
    То есть чтение лога должно быть на сервере где он формируется, или с какой-то частотой его копировать на сервер где происходит его обработка.
    Так же посмотрите в сторону Vector.dev (https://vector.dev/)
  • Как написать функцию шифрования методом подстановки encode?

    AlexMcArrow
    @AlexMcArrow
    нужно разбить посимвольно сообщение "text", затем этот символ найти в открытом алфавите и определить его id и заменить на символ с таким же id только шифрованного алфавита и записать допустим в массив его, но как это реализовать не знаю.

    Логику вы определили верно (почти, не учли только "не найденные" символы).

    Но если у вас проблема описать логику с использованием ЯП - вам сперва нужно изучить ЯП
  • Почему отваливаются вебсокеты workerman с приложением на ionic. Кто виноват клиент или сервер?

    AlexMcArrow
    @AlexMcArrow
    VladimirDronik, в части разработки на мобилках - могу только сделать предположения.
    Сокет соединение подразумевает постоянную сетевую активность. моб устройства стараются экономить заряд и трафик - так что скорее всего отключение вы не победите, или в противном случаи ваш софт будет сажать аккумулятор. Полагая именно по этой причине и придумали PUSH )

    В проекте в котором я участвовал на стороне разработки сервера, коллеги на клиенте решили проблему таким образом:
    1) держим сокет сколько можем
    2) на стороне сервера ведется контроль (авторизация+сокет) - если пользователь авторизовался (login) и явно не посылал команды "выход" (logout) и произошло соединение = такой пользователь считается активным до тех пор пока не пришлет команду "выход" (logout)
    3) сокет до пользователя контролируется сервером, если клиент не ответил - сокет убивается (со стороны сервера) и клиенту ставиться флаг "в сети без сокета"

    Если произошло событие о котором надлежит уведомить пользователя и пользователь в "вошел" (login)
    1) есть активный сокет - шлем данные на сокет
    2) стоит флаг"в сети без сокета" - шлем "пинок" через ПУШ
    Суть "пинка" - разбудить девайс, что бы тот создал сокет.

    Может решение и не корректное - но оно работало.
  • Сколько памяти расходует скрипт PHP?

    AlexMcArrow
    @AlexMcArrow
    paskelas, "Но сначала найти корень моих бед." - каждая объявленная переменная даже равная NULL занимает около 200 байт. Каждый массив = 300байт, Каждый класс - это набор из переменных и массивов

    Попробуйте заменить все unset на приведение переменной в значение равной null
    $a = null;
    (https://stackoverflow.com/a/20679276)
  • Сколько памяти расходует скрипт PHP?

    AlexMcArrow
    @AlexMcArrow
    Если у вас есть файл размеров 10Мб и вы загружаете его в переменную (память 10Мб)
    Далее мы начинаем разбирать его как DOM структуру формируя для каждого элемента КЛАСС (1Кб на элемент) ~= 1000строк * 1Кб = 1Мб (и это только структура без данных) (память 21Мб - именно так, ведь вы загрузили в переменную а теперь создали кучу классов в этими данными)
    Далее вы начали обрабатывать данные (предположим что вы просто перекладываете их в другой массив) = +10Мб массив (+10кб на хранение хешей ключей) (память 32Мб)

    Подставьте свои значений размера первичных данных и операции которые вы делаете - получите понимание куда "течет" ваша память.
  • Почему слетают индексы?

    AlexMcArrow
    @AlexMcArrow
    "само" ни чего не происходит => есть "кто-то" и\или "что-то" сделавшее данную операцию.
    1) есть сервер - кто имеет к нему доступ?
    2) есть phpmyadmin - кто имеет к нему доступ?
    3) лунатизм? )
  • Как прочитать файл построчно с кастомным разделителем?

    AlexMcArrow
    @AlexMcArrow
    Концептуально:
    Читаем файл как stream, по байтно. проверяем прочитанный байт на соотвествие шаблону разделителя:
    если НЕТ - заполняем буффер
    если ДА - все что в буффере бросаем в колбэк (так как строка кончилась) буффер очищаем
    идем дальше, пока файл не кончился
  • Как лучше сохранить данные?

    AlexMcArrow
    @AlexMcArrow
    Еще раз прочитал что написал Я и автор - у меня вариант построчного хранения, что конечно выходит за суть проблемы\вопроса автора.
    Тогда делаем так: в mapper пишем попарно два указателя старт и длинна записи, при этом таких указателей может быть много: 0,100,500,20 = что говорит что данные находяться с 0 байта длинной 100 и с 500 длиной 20 (дефрагментация данных - как на дисках). Это позволит писать новые данные в конец файла, а в случаи обновления записи - заполнять ранее занятое место и писать опять в конце. Так же можно вести маппинг освобидившихся мест и использовать их повторно.

    ЗЫ ну и конечно нужно думать о дефрагментации что бы собирать данные в целое (например отдельный метод который будет это делать во время простоя БД, или по пинку пользователя)
  • Поиск по большой БД MySQL?

    AlexMcArrow
    @AlexMcArrow
    Посмотрите в сторону Sphinx или elasticsearch, lucene - тоже самое что у вас, только заведомо быстрее и даст возможность дополнить не только тегами но и каким-то текстом (кусок из PDF - поисковый набор) - и будет как Гугл))
  • Не получается добить регулярное выражение?

    AlexMcArrow
    @AlexMcArrow
    А я правильно понял, что вся задача - найти <w:p>{{****}} </w:p> - что бы потом их подменить?
    Может такое подойдет? (<w:p>(?:.*?){{(.*?)}}(?:.*?)<\/w:p>)
  • Не получается добить регулярное выражение?

    AlexMcArrow
    @AlexMcArrow
    может поможет - .*(<w:p>(?:.*?){{zxc}}(?:.*?)<w:p>)
  • Как получать значение ключа в многомерном массиве?

    AlexMcArrow
    @AlexMcArrow
    /\"VALUE\"\:\"(.*?)\"/
    {"37:10":{"VALUE":"55.75303026534,37.463532104492"}}
    {"37:10":[[{"VALUE":"55.75303026534,37.463532104492"}]]}
  • Возможны параллельные запросы через rest api?

    AlexMcArrow
    @AlexMcArrow
    Username, если отправлены два запроса с ФРОНТА на БЕКЭНД - то каждый из них работает независимо от других запросов. А вот ТО что работает на БЕКЭНДЕ (в РНР) оно работает ПОСЛЕДОВАТЕЛЬНО.
    Вывод:
    1) если у вас доступный по API метод, который получает внешние данные, парсит их и результат пишет в БД, то эта выполняется ПОСЛЕДОВАТЕЛЬНО.
    2) НО, если вы обратитесь к этому методу ДВА и более раз, каждый запрос будет работать отдельно от других таких-же, но все что выполняет САМ метод будет соотвествовать пункту 1.