myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему

> WebServer, скрипт создающий веб-интерфейс для хаба

Nickolya
сообщение 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:
  • полностью переделана работа самого парсера скриптов, теперь возможны конструкции вида
    Код
    <?lua if sData ?>какие-то данные<?lua else ?>еще что-то<?lua end ?>
  • добавлена работа с некоторыми типами файлов (картинки, текст, html)
  • изменен интерфейс скрипта
  • идентификатор сессии убран в параметр куки из урл, теперь для работы необходимы включенные cookie!
  • кеш содержимого страницы, теперь если страница или подгружаемые в нее страницы не изменялись, уже скомпилированное содержимое берется из кеша


Выкладываю версию в таком виде для того чтобы оттестировали и посмотрели, а так же чтобы Jaska перевел под работу с веб-интерфейсом самого русхаба ввиду отсутствия времени у меня.

Мануал по работе страниц скрипта для разработчиков:

Код луа заключается в теги аналогично пхп:
Код
<?lua -- код ?>что-то там
В самом же парсере все подобные конструкции приводятся к виду
Код
-- код
print([=============[что-то там]=============])
Подобные скобки нужны чтобы исключить вложенные строки из оформления или еще чего-то, над этим моментом надо еще поработать big_smile.gif
Для перенаправления используется код вида
Код
<?lua
    MOVETO = (SERVER.tHeaders["Host"] or "").."/config/"
    return
?>

после определения переменной MOVETO все то что сгенерирует код скрипта не будет использовано и будет совершено перенаправление посредством отсылки нужных заголовков клиенту, чтобы не выполнять лиший код после определения страницы перенаправляения мы делаем возврат (return) из глобального окружения.

Для работы с сессиями определена таблица SESSION в которую можно заносить (и удалять) данные в любом виде, идентификатор сессии хранится в куки и срок сессии определяется в конфигурации скрипта параметрами
Код
iSessionTime = 60 * 60 * 10
iFirstSessionTime = 60 * 2
где iFirstSessionTime - время на существовании сессии если пользователь зашел в первый раз и не предпринимает никаких действий, а iSessionTime - время для сессии для 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")


По любым вопросам и замечаниям работы парсера обращаться в тему скрипта! big_smile.gif


Скрипт создан на основе сделанного как-то давно мною скрипта Webhubconfig для PtokaX.

Старые версии, оставил на память, качать их не надо
Прикрепленный файл  WebServer_v0.1.rar ( 7.41 килобайт ) Кол-во скачиваний: 27

Прикрепленные файлы
Прикрепленный файл  extend.rar ( 16.73 килобайт ) Кол-во скачиваний: 126
Прикрепленный файл  WebServer_v0.2.rar ( 10.02 килобайт ) Кол-во скачиваний: 106
 
Go to the top of the page
+Quote Post
Otshelnik-Fm
сообщение 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'
Go to the top of the page
+Quote Post
Setuper
сообщение 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)
    Core.SendToProfile(0, "*** Произошла ошибка в скрипте: "..sErrorMsg)
    return true
end
(при условии, что профиль 0 - это профиль админа big_smile.gif )


Спасибо сказали:
Go to the top of the page
+Quote Post
Nickolya
сообщение 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 - длина идентификатора сессии
Go to the top of the page
+Quote Post
Otshelnik-Fm
сообщение 24.1.2010, 15:25
Сообщение #5


Я коварный Санта Клаус
******

Группа: Пользователи
Сообщений: 523
Регистрация: 4.11.2008
Из: Саратов
Пользователь №: 985
Спасибо сказали: 54 раза




нет больше такой оошибки. При попытке войти на сайт по адресу http://localhost:81/
Цитата
Ошибки: У пользователя Otshelnik-Fм нет прав доступа!
Go to the top of the page
+Quote Post
Setuper
сообщение 24.1.2010, 15:30
Сообщение #6


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Первые шаги по написанию веб-морды.
Помнится кто-то говорил, что lua сокеты глючат (не знаю не проверял). Однако, возможно стоит задуматься о рациональности работы веб-сервера на lua? С одной стороны, действительно хорошо, не нужно устанавливать какой-нибудь там апач, php и тд, с другой стороны, стационарный веб сервер наверное всё же будет работать быстрее. Поэтому возникает сразу 3 мысли (которые в принципе все возможно реализовать со временем). Первая, - это данный веб-сервер на lua. Вторая, - это написание под хаб плагина веб сервера. Третья, - это установка обычного веб сервера (того же апача). При реализации всех этих вещей админ хаба сможет сам выбрать.

Но это так, на будущее big_smile.gif А пока думаю нужно ещё много сделать в этом направлении.

Otshelnik-Fm:
Код
sAccessNick = "admin"
sAccessPass = "admin"
Go to the top of the page
+Quote Post
Otshelnik-Fm
сообщение 24.1.2010, 15:41
Сообщение #7


Я коварный Санта Клаус
******

Группа: Пользователи
Сообщений: 523
Регистрация: 4.11.2008
Из: Саратов
Пользователь №: 985
Спасибо сказали: 54 раза




туплю что-то... Спасибо. Работает идеально всё!
Go to the top of the page
+Quote Post
Nickolya
сообщение 24.1.2010, 16:01
Сообщение #8


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Цитата(Nickolya @ 23.1.2010, 16:23) *
Скрипт по умолчанию работает на 81 порту, и пароль и логин по умолчанию admin, меняется это все в начале самого скрипта.

Otshelnik-Fm, читаем 1 пост внимательнее...

Цитата(Setuper @ 24.1.2010, 15:30) *
Первые шаги по написанию веб-морды.
Помнится кто-то говорил, что lua сокеты глючат (не знаю не проверял). Однако, возможно стоит задуматься о рациональности работы веб-сервера на lua? С одной стороны, действительно хорошо, не нужно устанавливать какой-нибудь там апач, php и тд, с другой стороны, стационарный веб сервер наверное всё же будет работать быстрее. Поэтому возникает сразу 3 мысли (которые в принципе все возможно реализовать со временем). Первая, - это данный веб-сервер на lua. Вторая, - это написание под хаб плагина веб сервера. Третья, - это установка обычного веб сервера (того же апача). При реализации всех этих вещей админ хаба сможет сам выбрать.

Но это так, на будущее big_smile.gif А пока думаю нужно ещё много сделать в этом направлении.

Setuper, сокеты вполне себе работают, спасибо за библиотеку под русхаб.
Для себя делал тест вот этого сервера, открывал в опере 20 закладок и ставил ежесекундное обновление, время работы самого скрипта не превышало и сотой доли секунды, а максимальное время ожидания клиента составляло сотые доли секунды, хотя обработка и стоит в 300 мсек. Я так думаю что апаче даже тяжелее big_smile.gif Хотя возможности сравнивать конечно бессмысленно. Единственное, до какого извращения я еще не дошел так это обработка конструкций вида
Код
<?lua if sData ?>какие-то данные<?lua else ?>еще что-то<?lua end ?>
но думаю и это сделаю big_smile.gif Я хочу добиться того чтобы юзер воткнул библиотеки если надо и включил скрипт с минимальными настройками, без установки дополнительных программ и извращения с ними. Прямое взаимодействие с хабом дает нам прекрасную и простую возможность напрямую им управлять.
Я очень бы хотел сервер, написанный не на скриптовом языке и обрабатывающий луа т.к. все-таки это самый быстрый скриптовый язык, а расширить возможности можно применяя апи... Если будет плагин, из него потом можно и отдельный веб-сервер сделать, то это будет прекрасно, еще одно великолепное творение big_smile.gif


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 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 событие.

Вот такие трудности по написанию веб-сервера, которые я надеюсь вы мне поможете решить big_smile.gif


Спасибо сказали:
Go to the top of the page
+Quote Post
Nickolya
сообщение 21.2.2010, 12:49
Сообщение #10


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Замечательно! Конечно поможем, благодаря тому творению что ты видишь выше, я немного изучил работу веб-сервера. Рассказываю.
Неразрываемое соединение в принципе, как мне кажется, немного ускоряет работу клиента т.к. он прогоняет несколько запросов через 1 поток соединения, но повышается нагрузка на сам сервер т.к. ему приходится держать соединение пользователя. Так что для начала не советую заморачиваться и сделать закрывающий после каждого запроса соединение сервер. Это осуществляется отсылкой заголовка
Цитата
Connection: close
и закрытем соединение сразу после передачи всех данных. Потом если будет желание доработаешь сервер со всяким изюмом big_smile.gif
По поводу определения команд протокола не стоит особо заморачиваться. В самом начале клиент посылает запрос состоящий из заголовков + еще может быть дополнительное тело сообщения, в котором передаются POST данные. Все заголовки начинаются с новой строки с переносом \r\n к примеру (взято из вики, про все остальное читать там):
Код
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
И по-идее запрос заканчивается пустой строкой, по которой можно судить об окончании запроса. Конечно для защиты надо сделать определенное ограничение для получения заголовков. При наличии POST-данных, мы получаем от клиента ровно столько байт, сколько указано в заголовке
Цитата
Content-Length: 1024
это число конечно тоже надо ограничивать дабы избежать перегрузок сервера, POST-данные идут через пустую строку от заголовков (взято еще из вот этой очень понятной статьи):
Цитата
POST http://www.site.ru/news.html HTTP/1.0\r\n
Host: www.site.ru\r\n
Referer: http://www.site.ru/index.html?#092;r\n
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

Если что непонятно - спрашивай, буду очень сильно рад помочь. Спасибо за разработки!


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 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.
Go to the top of the page
+Quote Post
Nickolya
сообщение 21.2.2010, 13:13
Сообщение #12


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Цитата(Nickolya @ 21.2.2010, 12:49) *
И по-идее запрос заканчивается пустой строкой, по которой можно судить об окончании запроса.

Попробуй этот метод, я думаю так все и происходит. Т.е. фактически запрос полностью вот такой:
Цитата
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
(пустая строка)

Луа событие конечно лучше всего по окончанию всего запроса.


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 21.2.2010, 13:50
Сообщение #13


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Пустая строка - это \r\n
То есть по своей сути нужно ловить \r\n\r\n. Предыдущий перенос и перенос текущей пустой строки.
Сейчас проверю действительно ли это так

Да, действительно, клиент в конце своего запроса ставит пустую строку.
Разделитель определён. Осталось реализовать big_smile.gif


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 2.3.2010, 13:35
Сообщение #14


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Очень нужна реализация конструкции вида:
Код
<?lua if sData ?>какие-то данные<?lua else ?>еще что-то<?lua end ?>

big_smile.gif
По всей видимости нужна обработка не каждой части <?lua ?>, а полностью всех частей с соответствующими функциями, отвечающими за вставки данных между этими частями.

Так же внутри данной конструкции нужно предусмотреть Lua-функцию echo(), которая добавляла бы данные.

Код
<?lua echo("msg") ?>
Go to the top of the page
+Quote Post
Nickolya
сообщение 2.3.2010, 15:31
Сообщение #15


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Выложил в 1 пост "новую" версию, постарался все по-быстрому описать, если что непонятно будет - спрашивайте.


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 2.3.2010, 18:46
Сообщение #16


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Огромное спасибо за новую версию. Отличная работа! Даже ошибки при парсинге показываются big_smile.gif Класс.
Go to the top of the page
+Quote Post
Setuper
сообщение 4.3.2010, 22:42
Сообщение #17


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Как получить имя сессии?
Переменная SESSION = tSessions[sUid].sData, являющаяся таблицей - пустая. Нужен аналог php функции session_name()
big_smile.gif

И ещё нужен аналог функции getmypid().
Go to the top of the page
+Quote Post
Nickolya
сообщение 5.3.2010, 0:26
Сообщение #18


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Пока сделано так что сессии не контролируются скриптом веб-сервера, сам сервер с ними работает, так что никаких функций для этого нет. А эта таблица, что передается по сслыке (я о SESSION) является как раз той в которой можно что-то сохранять и при следующем вызове скрипта таблица будет уже не пустой.

А фунция getmypid "получает ID РНР-процесса", объясни пожалуйста доходчиво зачем оно надо? Процесса, ввиду отсутствия функции апи что запускает функцию луа в отдельном потоке, как такового и нет, он всегда один... Или я что-то не так понял?

Замеченые баги сейчас: идентификатор сессии при ее истечении меняется на новый только после перегрузки страницы, т.е. приходится лишний раз выполнить какое-то дейстиве чтобы в куки записался новый идентификатор, работа с сессиями была введена эксперементально, будем доводить до ума...
И еще функция loadtoscriptfile не принимает динамические переменные созданные в ходе работы скрипта ввиду того что функция обрабатывается на уровне парсинга страницы, попробую это поправить в новой версии парсера.

Остальные пожелания к парсингу и самой работе луа для веба выслушаю с большим удовольствием в этой теме big_smile.gif
Go to the top of the page
+Quote Post
Setuper
сообщение 5.3.2010, 0:36
Сообщение #19


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Функция getmypid нужна для создания уникального идентификатора для аякса. Однако, думаю что и без него можно будет уникальность организовать.
Go to the top of the page
+Quote Post
Nickolya
сообщение 5.3.2010, 0:45
Сообщение #20


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Как еще 1 параметр юзера можно завести счетчик и банально его увеличивать на 1 с каждым новым запросом, так подойдет? Сделаешь сам еще 1 параметр сохраняющийся в талицу при запросе?
Go to the top of the page
+Quote Post

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Сейчас: 28.3.2024, 14:20