WebServer, скрипт создающий веб-интерфейс для хаба |
Здравствуйте, гость ( Вход | Регистрация )
WebServer, скрипт создающий веб-интерфейс для хаба |
23.1.2010, 16:23
Сообщение
#1
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
WebServer
Версия: 0.2 Совместим с последними версиями хаба! Скрипт создания веб-интерфейса для хаба. Для работы нужна библиотека сокетов, качать ее в теме luasocket для RusHub'а, и библиотека extend.dll (заимствовано из LuaAIO), она находится в прикрепленном архиве, все библиотеки кладем в папку libs. Скрипт по умолчанию работает на 81 порту, и пароль и логин по умолчанию admin, меняется это все в начале самого скрипта. Изменения в версии 0.2 по отношению к 0.1:
Выкладываю версию в таком виде для того чтобы оттестировали и посмотрели, а так же чтобы Jaska перевел под работу с веб-интерфейсом самого русхаба ввиду отсутствия времени у меня. Мануал по работе страниц скрипта для разработчиков: Код луа заключается в теги аналогично пхп: Код <?lua -- код ?>что-то там В самом же парсере все подобные конструкции приводятся к виду Код -- код Подобные скобки нужны чтобы исключить вложенные строки из оформления или еще чего-то, над этим моментом надо еще поработать print([=============[что-то там]=============]) Для перенаправления используется код вида Код <?lua MOVETO = (SERVER.tHeaders["Host"] or "").."/config/" return ?> после определения переменной MOVETO все то что сгенерирует код скрипта не будет использовано и будет совершено перенаправление посредством отсылки нужных заголовков клиенту, чтобы не выполнять лиший код после определения страницы перенаправляения мы делаем возврат (return) из глобального окружения. Для работы с сессиями определена таблица SESSION в которую можно заносить (и удалять) данные в любом виде, идентификатор сессии хранится в куки и срок сессии определяется в конфигурации скрипта параметрами Код iSessionTime = 60 * 60 * 10 где iFirstSessionTime - время на существовании сессии если пользователь зашел в первый раз и не предпринимает никаких действий, а iSessionTime - время для сессии для 2х и более переходов пользователя по страницам сайта.iFirstSessionTime = 60 * 2 Так же скрипт получает таблицу SERVER, являющуюся таблицей клиента, обработанного до этого движком скрипта. Эта таблица имеет вид: Код SERVER = { ["iStartTime"] = 4,968, ["sUrl"] = "/config/", ["sGetData"] = "we=get&page=1234", ["sFile"] = "one.lua", ["tPostData"] = { ["one"] = "1", }, ["tHeaders"] = { ["Accept-Charset"] = "iso-8859-1, utf-8, utf-16, *;q=0.1", ["TE"] = "deflate, gzip, chunked, identity, trailers", ["Accept-Encoding"] = "deflate, gzip, x-gzip, identity, *;q=0", ["Accept-Language"] = "ru-RU,ru;q=0.9,en;q=0.8", ["Host"] = "localhost:81", ["Connection"] = "Keep-Alive, TE", ["Accept"] = "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1", ["User-Agent"] = "Opera/9.80 (Windows NT 5.1; U; MRA 5.4 (build 02620); ru) Presto/2.2.15 Version/10.10", ["Cookie"] = "LUASESSID=93C975EDB2DB840152F7106892A7509C84EBFE8273D3CDF964D061A0E49BDB73; pid=431697804b79522a12991ac0677f2d2d; LUASESSID=93C975EDB2DB840152F7106892A7509C84EBFE8273D3CDF964D061A0E49BDB73", ["Referer"] = "http://localhost:81/config/", ["Cookie2"] = "$Version=1", }, ["tCookie"] = { ["pid"] = "431697804b79522a12991ac0677f2d2d", ["LUASESSID"] = "93C975EDB2DB840152F7106892A7509C84EBFE8273D3CDF964D061A0E49BDB73", }, ["sVersion"] = "HTTP/1.1", ["sLoadFileWay"] = "C:/Server/RusHub/scripts/www/config/index.lua", ["sPath"] = "/config/", ["Client"] = tcp{client}: 00BFC0F0, ["tGetData"] = { ["we"] = "get", ["page"] = "1234", }, ["sMethod"] = "GET", } Для удобства таблицы SERVER.tGetData и SERVER.tPostData вынесены в отдельные таблицы (ссылкой) GET и POST соответственно. Так же таблица Core доступна напрямую из окружения. В сам скрипт глобальное окружение (таблицы table, math и прочие) передаются через ссылку в переменной _G (аналогично модулю). Для опять же удобства работы со строками таблица string внесена в окружение выполняемого скрипта и работать со строками можно по-прежнему, к примеру: Код one = ("one two"):match"%S-" остальные функции надо вызывать через _G, к прмеру так:Код sData = _G.table.concat(tOurData) В глобальном окружении так же существуют функция print, осуществляющая добавление данных ко всему выводимому содержимому. Обычная функция луа по-прежнему доступна через _G.print Плюсом парсер обрабатывает функцию loadtoscriptfile в которую передается путь к загружаемому коду или тексту в файл, обработка идет аналогично loadfile, однако хочу заметить что эта функция обрабатывается на уровне парсинга страницы при ее преобразовании в код луа и в самом окружении она не присутствет. Вот пример, путь мы даем относительно ТЕКУЩЕГО загруженного скрипта: Код loadtoscriptfile("../sources/Login.lua") По любым вопросам и замечаниям работы парсера обращаться в тему скрипта! Скрипт создан на основе сделанного как-то давно мною скрипта Webhubconfig для PtokaX. Старые версии, оставил на память, качать их не надо
Прикрепленные файлы
extend.rar ( 16.73 килобайт )
Кол-во скачиваний: 126
WebServer_v0.2.rar ( 10.02 килобайт ) Кол-во скачиваний: 106 |
|
|
24.1.2010, 15:03
Сообщение
#2
|
|
Я коварный Санта Клаус Группа: Пользователи Сообщений: 523 Регистрация: 4.11.2008 Из: Саратов Пользователь №: 985 Спасибо сказали: 54 раза |
Цитата [14:47:48] *** Произошла ошибка в скрипте: C:/rushub_2.0.9a/scripts/WebServer_v0.1.lua:444: bad argument #1 to 'pairs' (table expected, got nil) И расскажи что нужно вписать (или для чего они) вот сюда: iTimeout = 1/20 sAddress = "*" - для теста писать локалхост? iPort = 81 - это ясно - порт подключения iConnections = 32 iTimerInterval = 300 iSessionTime = 60 * 20 iUidLen = 32 Цитата [15:00:14] <смусмумрик> Произошла ошибка в скрипте: C:/rushub_2.0.9a/scripts/WebServer_v0.1.lua:116: module 'mime' not found: no field package.preload['mime'] no file 'C:\rushub_2.0.9a\mime.lua' no file 'C:\rushub_2.0.9a\libs\mime.lua' no file 'C:\rushub_2.0.9a\scripts\mime.lua' no file 'C:\rushub_2.0.9a\scripts\libs\mime.lua' no file 'C:\rushub_2.0.9a\plugins\mime.lua' no file 'C:\rushub_2.0.9a\mime\init.lua' no file 'C:\rushub_2.0.9a\libs\mime\init.lua' no file 'C:\rushub_2.0.9a\scripts\mime\init.lua' no file 'C:\rushub_2.0.9a\scripts\libs\mime\init.lua' no file 'C:\rushub_2.0.9a\plugins\mime\init.lua' no file 'C:\rushub_2.0.9a\mime.dll' no file 'C:\rushub_2.0.9a\libs\mime.dll' no file 'C:\rushub_2.0.9a\scripts\mime.dll' no file 'C:\rushub_2.0.9a\scripts\libs\mime.dll' no file 'C:\rushub_2.0.9a\plugins\mime.dll' - [14:47:02] *** Произошла ошибка в скрипте: C А вот это сообщение вылезло простому юзеру тоже (а должно по идее админу тока) когда я не докинул в папку module 'mime' |
|
|
24.1.2010, 15:07
Сообщение
#3
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
В коде скрипта так:
Код function OnError(sErrorMsg) Core.SendToAll("*** Произошла ошибка в скрипте: "..sErrorMsg) return true end поэтому сообщение об ошибке отправляется всем. Чтобы отправлялось только админу нужно исправить: Код function OnError(sErrorMsg) (при условии, что профиль 0 - это профиль админа )
Core.SendToProfile(0, "*** Произошла ошибка в скрипте: "..sErrorMsg) return true end |
|
|
24.1.2010, 15:15
Сообщение
#4
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Ошибок больше никаких не было? Скорее всего скрипт надо просто перезапустить т.к. функция остановила выполнение при ошибке, это результат того что в OnError возвращается true. Попробуй запустить заново со всеми библиотеками и прочим, будет ли эта ошибка?!
А настройки имеют следующие значения: iTimeout = 1/20 - таймаут на операции с сокетами, если выдается ошибка при подключении к сайту, лучше это значение увеличить sAddress = "*" - * означает все сетевые интерфейсы, локалхост сделает "сайт" доступным только для локального подключения, лучше это не трогать iPort = 81 - да, это действительно порт подключения iConnections = 32 - максимальное количество одновременных соединений iTimerInterval = 300 - интервал проверки новых соединений и их обработки iSessionTime = 60 * 20 - время сессии, когда оно закончится, сессия удаляется и надо вновь войти iUidLen = 32 - длина идентификатора сессии |
|
|
24.1.2010, 15:25
Сообщение
#5
|
|
Я коварный Санта Клаус Группа: Пользователи Сообщений: 523 Регистрация: 4.11.2008 Из: Саратов Пользователь №: 985 Спасибо сказали: 54 раза |
нет больше такой оошибки. При попытке войти на сайт по адресу
Цитата Ошибки: У пользователя Otshelnik-Fм нет прав доступа!
|
|
|
24.1.2010, 15:30
Сообщение
#6
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Первые шаги по написанию веб-морды.
Помнится кто-то говорил, что lua сокеты глючат (не знаю не проверял). Однако, возможно стоит задуматься о рациональности работы веб-сервера на lua? С одной стороны, действительно хорошо, не нужно устанавливать какой-нибудь там апач, php и тд, с другой стороны, стационарный веб сервер наверное всё же будет работать быстрее. Поэтому возникает сразу 3 мысли (которые в принципе все возможно реализовать со временем). Первая, - это данный веб-сервер на lua. Вторая, - это написание под хаб плагина веб сервера. Третья, - это установка обычного веб сервера (того же апача). При реализации всех этих вещей админ хаба сможет сам выбрать. Но это так, на будущее А пока думаю нужно ещё много сделать в этом направлении. Otshelnik-Fm: Код sAccessNick = "admin"
sAccessPass = "admin" |
|
|
24.1.2010, 15:41
Сообщение
#7
|
|
Я коварный Санта Клаус Группа: Пользователи Сообщений: 523 Регистрация: 4.11.2008 Из: Саратов Пользователь №: 985 Спасибо сказали: 54 раза |
туплю что-то... Спасибо. Работает идеально всё!
|
|
|
24.1.2010, 16:01
Сообщение
#8
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Скрипт по умолчанию работает на 81 порту, и пароль и логин по умолчанию admin, меняется это все в начале самого скрипта. Otshelnik-Fm, читаем 1 пост внимательнее... Первые шаги по написанию веб-морды. Помнится кто-то говорил, что lua сокеты глючат (не знаю не проверял). Однако, возможно стоит задуматься о рациональности работы веб-сервера на lua? С одной стороны, действительно хорошо, не нужно устанавливать какой-нибудь там апач, php и тд, с другой стороны, стационарный веб сервер наверное всё же будет работать быстрее. Поэтому возникает сразу 3 мысли (которые в принципе все возможно реализовать со временем). Первая, - это данный веб-сервер на lua. Вторая, - это написание под хаб плагина веб сервера. Третья, - это установка обычного веб сервера (того же апача). При реализации всех этих вещей админ хаба сможет сам выбрать. Но это так, на будущее А пока думаю нужно ещё много сделать в этом направлении. Setuper, сокеты вполне себе работают, спасибо за библиотеку под русхаб. Для себя делал тест вот этого сервера, открывал в опере 20 закладок и ставил ежесекундное обновление, время работы самого скрипта не превышало и сотой доли секунды, а максимальное время ожидания клиента составляло сотые доли секунды, хотя обработка и стоит в 300 мсек. Я так думаю что апаче даже тяжелее Хотя возможности сравнивать конечно бессмысленно. Единственное, до какого извращения я еще не дошел так это обработка конструкций вида Код <?lua if sData ?>какие-то данные<?lua else ?>еще что-то<?lua end ?> но думаю и это сделаю Я хочу добиться того чтобы юзер воткнул библиотеки если надо и включил скрипт с минимальными настройками, без установки дополнительных программ и извращения с ними. Прямое взаимодействие с хабом дает нам прекрасную и простую возможность напрямую им управлять.Я очень бы хотел сервер, написанный не на скриптовом языке и обрабатывающий луа т.к. все-таки это самый быстрый скриптовый язык, а расширить возможности можно применяя апи... Если будет плагин, из него потом можно и отдельный веб-сервер сделать, то это будет прекрасно, еще одно великолепное творение |
|
|
20.2.2010, 16:20
Сообщение
#9
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Дела обстоят так...
Взвесив все за и против, решил написать веб сервер в дополнении к уже имеющемуся dc серверу (встроить веб сервер). Точнее вот как: На хабе существует обычный сервер, который принимает соединения. Этот сервер наследуется dc сервером. Так вот... Можно точно также сделать надстройку веб сервера. При этом все соединения, будь они dc соединениями или соединениями веб сервера, будут обрабатываться одним единым сервером, а после обработки парситься уже своими серверами. Данная система "многосерверности" была заложена изначально, и является гениальным конструктивным решением. Общая обработка и, разные парсеры и дальнейшее поведение. При всём сказанном пока имеем вот что: прослушиваем порт 411 для dc сервера и, например, порт 8080 для веб-сервера. При коннекте на порт веб сервера, начинаем получать данные от клиента. После получения данных в lua вызывается событие, которое будет отвечать за полученные данные. Из функции этого события можно будет с помощью api функции отправить клиенту ответ, при этом сервер будет держать некоторое время соединение. Теперь встаёт вопрос. Как работают веб серверы? Ведь они закрывают иногда соединения. Когда они его закрывают? Ведь в случае частых обменов данными между клиентом и сервером (например, онлайн веб-чат), не логично рвать соединение. Хотя разорвать соединение - это обычная практика для веб-серверов, так как в любом случае существуют куки, которые отвечают за состояние и стадии клиента. Поэтому возможен случай разрыва соединения после определённого интервала времени бездействия. Теперь, почему нельзя сделать так: принять соединение клиента, получить данные от клиента, отправить ответ клиенту и разорвать соединение? Так нельзя сделать по причине существования на сервере неблокирующих сокетов, из-за того, что за один раз данные сервер может получить от клиента не все, а только часть. Отсюда возникает ещё один вопрос: какой разделитель команд в протоколе http ? Для NMDC протокола всё прозрачно: получаем данные из неблокирующего сокета и записываем их в буфер до тех пор, пока не встретим разделитель протокола (а именно знак |). После того, как встретили разделитель протокола, извлекаем из буфера команду до этого разделителя и отсылаем это команду парсеру на обработку. В http протоколе не понятно когда обрабатывать и вызывать lua событие, ведь для вызова lua события нужно получить все данные, ну или хотя бы 1 команду, а из-за неблокирующих сокетов за 1 раз мы не можем гарантировать что получим все данные от клиента, поэтому не можем вызывать lua событие. Вот такие трудности по написанию веб-сервера, которые я надеюсь вы мне поможете решить |
|
|
21.2.2010, 12:49
Сообщение
#10
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Замечательно! Конечно поможем, благодаря тому творению что ты видишь выше, я немного изучил работу веб-сервера. Рассказываю.
Неразрываемое соединение в принципе, как мне кажется, немного ускоряет работу клиента т.к. он прогоняет несколько запросов через 1 поток соединения, но повышается нагрузка на сам сервер т.к. ему приходится держать соединение пользователя. Так что для начала не советую заморачиваться и сделать закрывающий после каждого запроса соединение сервер. Это осуществляется отсылкой заголовка Цитата Connection: close и закрытем соединение сразу после передачи всех данных. Потом если будет желание доработаешь сервер со всяким изюмом По поводу определения команд протокола не стоит особо заморачиваться. В самом начале клиент посылает запрос состоящий из заголовков + еще может быть дополнительное тело сообщения, в котором передаются POST данные. Все заголовки начинаются с новой строки с переносом \r\n к примеру ( Код GET / HTTP/1.1 И по-идее запрос заканчивается пустой строкой, по которой можно судить об окончании запроса. Конечно для защиты надо сделать определенное ограничение для получения заголовков. При наличии POST-данных, мы получаем от клиента ровно столько байт, сколько указано в заголовке Host: www.example.com User-Agent: MyLonelyBrowser/5.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Цитата Content-Length: 1024 это число конечно тоже надо ограничивать дабы избежать перегрузок сервера, POST-данные идут через пустую строку от заголовков (Цитата POST Host: www.site.ru\r\n Referer: Cookie: income=1\r\n Content-Type: application/x-www-form-urlencoded\r\n Content-Length: 35\r\n \r\n login=Petya%20Vasechkin&password=qq Если что непонятно - спрашивай, буду очень сильно рад помочь. Спасибо за разработки! |
|
|
21.2.2010, 13:06
Сообщение
#11
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Вопрос вот какой: когда вызывать lua событие? Как определить полное получение всего того, что отправил клиент?
Из-за наличия неблокирующих сокетов, то что отправил клиент сервер может не получить за один раз. Например, клиент отправляет запрос: Код GET / HTTP/1.1 Host: www.example.com User-Agent: MyLonelyBrowser/5.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Сервер при первом прочтении из сокета получает: Код GET / HTTP/1.1 при втором прочтении из сокета, получает вторую часть:Host: www.example.com User-Agent: MyLonelyBrowser/5.0 Accept: text/html,application/xht Код ml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 По своей сути lua событие для обработки запроса нужно вызывать после получения полностью того, что хотел отправить клиент, а не после каждого получения какой-то неполной части. Конечно, при таком малом запросе скорее всего сервер получит всё за один раз, а не за два, однако, при большой нагрузки сервер попытается распределить получение на несколько раз, дабы отдать время на выполнение других задач. То есть не блокирующие сокеты - это своего рода распределение нагрузки, подобно многопоточности. С другой стороны можно вызывать lua событие при получении той или иной строки. То есть как и в NMDC протоколе, ждать разделитель (в данном случае знак переноса каретки и строки) и вызывать lua событие для обработки команды, которая идёт вплоть до разделителя. В этом случае последовательность команд http протокола должна контролироваться в самом lua. |
|
|
21.2.2010, 13:13
Сообщение
#12
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
И по-идее запрос заканчивается пустой строкой, по которой можно судить об окончании запроса. Попробуй этот метод, я думаю так все и происходит. Т.е. фактически запрос полностью вот такой: Цитата GET / HTTP/1.1\r\n Host: www.example.com\r\n User-Agent: MyLonelyBrowser/5.0\r\n Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n Accept-Language: ru,en-us;q=0.7,en;q=0.3\r\n Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n (пустая строка) Луа событие конечно лучше всего по окончанию всего запроса. |
|
|
21.2.2010, 13:50
Сообщение
#13
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Пустая строка - это \r\n
То есть по своей сути нужно ловить \r\n\r\n. Предыдущий перенос и перенос текущей пустой строки. Сейчас проверю действительно ли это так Да, действительно, клиент в конце своего запроса ставит пустую строку. Разделитель определён. Осталось реализовать |
|
|
2.3.2010, 13:35
Сообщение
#14
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Очень нужна реализация конструкции вида:
Код <?lua if sData ?>какие-то данные<?lua else ?>еще что-то<?lua end ?> По всей видимости нужна обработка не каждой части <?lua ?>, а полностью всех частей с соответствующими функциями, отвечающими за вставки данных между этими частями. Так же внутри данной конструкции нужно предусмотреть Lua-функцию echo(), которая добавляла бы данные. Код <?lua echo("msg") ?>
|
|
|
2.3.2010, 15:31
Сообщение
#15
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Выложил в 1 пост "новую" версию, постарался все по-быстрому описать, если что непонятно будет - спрашивайте.
|
|
|
2.3.2010, 18:46
Сообщение
#16
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Огромное спасибо за новую версию. Отличная работа! Даже ошибки при парсинге показываются Класс.
|
|
|
4.3.2010, 22:42
Сообщение
#17
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Как получить имя сессии?
Переменная SESSION = tSessions[sUid].sData, являющаяся таблицей - пустая. Нужен аналог php функции session_name() И ещё нужен аналог функции getmypid(). |
|
|
5.3.2010, 0:26
Сообщение
#18
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Пока сделано так что сессии не контролируются скриптом веб-сервера, сам сервер с ними работает, так что никаких функций для этого нет. А эта таблица, что передается по сслыке (я о SESSION) является как раз той в которой можно что-то сохранять и при следующем вызове скрипта таблица будет уже не пустой.
А фунция getmypid "получает ID РНР-процесса", объясни пожалуйста доходчиво зачем оно надо? Процесса, ввиду отсутствия функции апи что запускает функцию луа в отдельном потоке, как такового и нет, он всегда один... Или я что-то не так понял? Замеченые баги сейчас: идентификатор сессии при ее истечении меняется на новый только после перегрузки страницы, т.е. приходится лишний раз выполнить какое-то дейстиве чтобы в куки записался новый идентификатор, работа с сессиями была введена эксперементально, будем доводить до ума... И еще функция loadtoscriptfile не принимает динамические переменные созданные в ходе работы скрипта ввиду того что функция обрабатывается на уровне парсинга страницы, попробую это поправить в новой версии парсера. Остальные пожелания к парсингу и самой работе луа для веба выслушаю с большим удовольствием в этой теме |
|
|
5.3.2010, 0:36
Сообщение
#19
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Функция getmypid нужна для создания уникального идентификатора для аякса. Однако, думаю что и без него можно будет уникальность организовать.
|
|
|
5.3.2010, 0:45
Сообщение
#20
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Как еще 1 параметр юзера можно завести счетчик и банально его увеличивать на 1 с каждым новым запросом, так подойдет? Сделаешь сам еще 1 параметр сохраняющийся в талицу при запросе?
|
|
|
|
Сейчас: 23.12.2024, 3:49 |