Igor
которые на двигле source короче
Igor
по UDP к серверу подключается
Anonymous
Ааа количество просто?
Igor
Anonymous
А на чем накатал? На луа?
Igor
да
Igor
это ники и очки игроков
Anonymous
Здорово
Igor
там ещё передаётся время, которое они наиграли и количество игроков
Igor
у source query вообще не сложный протокол
Igor
и документация хорошая
Igor
поставил себе задачу: справиться без ffi, но получилось очень костыльно
Igor
потому что я luasocket в последнее время недолюбливаю
Anonymous
А зачем тут ффи?
Igor
для того чтобы напрямую к функциям сокета обращаться
Igor
а не через прослойку в виде luasocket
Anonymous
Из глибц
Anonymous
Понятно
Anonymous
Но это чревато наверное
Anonymous
Я не знаю как ффи с глибц работает
Igor
ffi нормально со всем работает
Igor
я уже писал сокетовую либу
Igor
только для TCP
Igor
которая совместима и с POSIX-подобными и с окнами
Anonymous
Через ффи писал?
Igor
Да
Igor
Из-за того, что я не использовал в скрипте квери ffi код совсем чуть-чуть страшный
Igor
да и float читать пока нечем
Igor
можно было бы чуть-чуть по-другому всё организовать, но не стоит забывать: я не спал нормально 2 дня :D
Igor
Вот то, что я для ffi накатал https://github.com/igor725/LuaClassic/blob/master/lua/network/socket.lua
Igor
Через ффи писал?
Anonymous
Спасибо
Igor
Тут всё тоже не очень хорошо по чистоте кода
Igor
у меня там ещё библиотека websocket'ов валяется маленькая в той же папке
Igor
работает вмест с этими сокетами только
Igor
мою библу, думаю будет не очень удобно использовать в каких-либо проектах, потому что она под определённый писалась, чтобы её было удобно использовать именно там
Anonymous
Ну можно вебсокеты перепилить на луасокет
Anonymous
И использовать отдельно
Igor
под luasocket уже есть библы вебсокетов
Anonymous
Думаю будет востребовано
Igor
но они все неудобны были для меня
Anonymous
Ааа пончл
Igor
одна там вообще с двумя зависимостями и недоделана
Igor
ей там copas был нужен и ещё что-то
Igor
Я пока свою писал переодически заглядывал в библу от капса, по большей части за константами, потому что они в окнах и POSIX разные, но не все, а по докам лазить их искать я не хотел
Igor
Его реализация, кстати, в разы удобнее моей https://github.com/CapsAdmin/luajitsocket/blob/master/ljsocket.lua
Snusmumriken
Какой же ты засранец, затаил обидушку а теперь выпендриваешься ))
Snusmumriken
Я вчера спал, добреутро
Snusmumriken
А на тему tcp-прокси — мб можно подумать на тему того чтобы накатать чистую проксю, на луасокетах или ещё чём-то. Должно быть не очень сложно, но надо чуть-чуть подумать чтобы сделать асинхронно и крутенько.
Snusmumriken
Но с чтением есть одна фигнюшка. TCP — потоковый протокол. Способы разделения сообщений у каждого приложенческого протокола свои, а иногда их и нет вовсе. А для того чтобы подменять сообщения — прокси должна знать, по какому приложенческому протоколу в данный момент передают данные, сепарировать отдельные сообщения, препарировать их и выдавать на другую сторону.
Super
ну вот, в этом-то и проблема
Super
из-за потоковости протокола
Super
не, сами сообщения, которые надо подменять, я понимаю
Super
сообщения в виде json
Snusmumriken
Хех, а как они отделяются друг от друга?
Super
\n
Super
ну это еще можно перепроверить будет, просто я не могу даже поснифать толком )
Super
тока я читаю сообщение, оно уже не попадает к proxy_pass и я не могу выдать нужный ответ
Snusmumriken
Ага. Значит катаешь на луях tcp-приёмник, который принимает в себя всякие json'ы через \n-разделитель, правит их и передаёт куда-нибудь ещё, и в обратку.
Snusmumriken
А если там HTTPS или аналог (tls какой-нить), то всё плохо ))
Super
ну принимать это я могу
Super
т.е. все отлично принимается, сообщение читается, там чистый жсон
Super
а далее я должен открыть сокет с источником и передать это ему, получить ответ, выдать клиенту
Super
я вообще правильно мыслю?
Super
и все это в рамках stream nginx
Super
и луа там этот будет
Super
https://github.com/openresty/stream-lua-nginx-module
Snusmumriken
Ну примерно, просто я не уверен что нгинкс даст тебе фильтровать данные.
Super
ну а почему нет, там как бы json ответ, который скажем говорит, что у тебя версия 3, а ты говоришь - а у меня версия 2
Super
а, ну да, я не нашел способа в нгинксе фильтровать
Super
но принципиально фильтровать думаю можно
Snusmumriken
А кто принимает все эти сообщеньки с жсонами?
Super
я вот думаю, а если допустим со мной клиент закрыл соединение, а я все еще имею открытое соединение с источником, как такое отслеживать?
Super
ну есть 2 узла A и B
Super
один из них отсылает, другой принимает - они могут сами с собой работать
Super
я хочу между ними встать и фильтровать
Super
и разруливать, в какой-то момент вместо узла B перекинуть D, если это выгоднее и т.д.
Snusmumriken
Прост может можно поправить узел А, чтобы сам делал свою работу со своими проверками.
Super
т.е такай система маршрутизации, но не просто менять прокси сорс, а менять еще и сами сообщения
Super
потому что скажем узел D не поддерживает напрямую узел A