myDC.ru

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

 
История благодарностей участнику Enyby. Спасибо сказали: 239
Дата поста: В теме: За сообщение: Спасибо сказали:
27.1.2012, 0:18 User Mode Fixer
API 2 | Исправление режима подключения пользователя
Все это выглядит похоже на подключение юзера в обход UserConnected.
Или на присутствии на хабе юзера, который не выводится в общем списке.
Или на отсылке запроса на подключения юзеру находящемуся на невнятной стадии подключения. Это, кстати, возможно если кого-то часто кидает.
А так все это похоже на мистику.

Новая версия 2.03.
Добавил обработку этого бага.

Кстати, совет тем, у кого большой хаб. Если происходит медленный вход, то это может стать причиной отваливания юзеров по таймауту и переопределением в пассив. Чтобы этого не происходило - увеличиваем таймаут соединения с 3 секунд до приемлимых значений, например, 10 секунд. В тоже время можно попробовать уменьшить интервал вызова главного цикла с 100 мс до 10 мс.
На винде сделать интервал меньше 10 мс не получится в принципе, так как все что меньше, будет приводится к 10 мс. Это особенности реализации таймеров C++ на винде.
На линуксовой птоке используется своя реализация таймеров, работающая из принимающего цикла, так что там может быть все что угодно, но на крупных хабах, хотя бы 10 мс задержки между вызовами получить будет нереально, будет больше. А все потому что пользователей много и все обычно что-то шлют.
rival, AfLc
26.1.2012, 16:09 User Mode Fixer
API 2 | Исправление режима подключения пользователя
Цитата(rival @ 26.1.2012, 14:53) *
просто чтоб список не обновлять

Какой список?

В принципе за код с заменами я не отвечаю, ибо вы могли выпустить какую-то тонкость, не зная об этом.

Выложил версию 2.02.
Там добавлена дополнительная обработка ошибок и некоторые улучшения статистики.
Если будут снова ошибки, то будут со статистикой и отладкой.
Если в статистистике будет появляется параметр "+NilUser" - присылайте статистику с отладкой, будем разбираться.
rival, AfLc
26.1.2012, 10:47 правила хаба
Есть в хабе такая штука как текстовые файлы. Создаете rules.txt с нужным текстом и не забываете поставить галочку на соответствующем пункте в меню настроек. Все будет работать.

Цитата

Текстовые файлы — Раздел управления текстовыми файлами. В PtokaX есть возможность вывода пользователю содержимого текстового файла (.txt) по команде. Файлы ищутся в подпапке texts. Например: создав .txt файл с определенным текстом и назвав его, допустим, текст.txt вы можете просмотреть его, послав в главный чат команду !текст.
  • Включить текстовые файлы — Включает функционал работы с текстовыми файлами.
  • Отправлять текст в личку — По-умолчанию текстовые файлы выводятся в главный чат, но эта настройка перенаправит сообщения в приват (личку).

Источник: http://wiki.mydc.ru/Описание_настроек_PtokaX
GULAM33, мамин_парень
26.1.2012, 2:02 Defend PM
API 2 | Полностью автоматическая защита ЛС от спама
Для "спасибо" на этом форуме есть специальная кнопка внизу каждого поста. Если пост помог - нажимаете кнопку.
rival, Marc
25.1.2012, 0:50 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Ну для твоего примера строка и таблица. Наверное ты не знаешь, но это особый такой способ именования переменных. К имени переменной впереди приписывается буква означающая тип. Например, sName - строка с именем, а tName - таблица с именем.
Префиксы:
  • s - string (строка)
  • t - table (таблица)
  • b - boolean (булево число)
  • i - integer (целое число)
  • n - number (число)



ADD:
Хочу отметить, что это только для того массива, который ты указал. Для произвольного содержимого таблицы это могут быть любые типы.
MIKHAIL
25.1.2012, 0:38 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Никак. У таблиц нет названия. Таблица это кусок памяти. А переменная, которая указывает на таблицу - указатель. Чтобы получить уникальное "имя" для таблицы, можешь вызвать tostring(tTable). На выходе будет строка вида "table: адрес памяти таблицы".

ADD:
В чем суть - на одну таблицу может указывать много переменных. И у каждой переменной будет свое имя, а таблица одна.

ADD:
Код
for sName, tTable in pairs(tContains) do
   -- do something
end

В этом цикле будут перебраны все элементы таблицы tContains, причем sName будет содержать текущий индекс, а tTable - его значение.
MIKHAIL
24.1.2012, 3:50 User Mode Fixer
API 2 | Исправление режима подключения пользователя
Нет. Но скрипт в любом случае будет отсылать со строкой тэга.

ADD:
Выложил версию 2.00.
По большей части скрипт переписан заново. Должен быстрее работать на крупных хабах.

ADD:
Выложил версию 2.01.
Там дефолтные настройки чуть улучшены, а то я тестировал и забыл изменить.
Артём, rival, AfLc
23.1.2012, 2:24 User Mode Fixer
API 2 | Исправление режима подключения пользователя
Новая версия 1.13.
Содержит критичное исправление.
rival, AfLc
22.1.2012, 23:41 User Mode Fixer
API 2 | Исправление режима подключения пользователя
Очень советую, первое время, например, неделю, продержать скрипт с настройками:
Код
bDetailedStats = true
bValidate = true
bFastDebug = true

Поскольку, если что-то пойдет не так, а у вас будет bValidate = false, то вы об этом даже не узнаете. Если неделю все спокойно, тогда можно все повыключать и пусть себе работает.

ADD:
Не думайте, что это перестраховка. Вот уже вылезла одна проблема.

Кстати, для крупных хабов (более 1000 человек онлайна), советую менять значение iMaxPoolSize на большее. Например, 48 или 64. Тогда режим пользователей будет определяться быстрее.
AfLc
22.1.2012, 22:58 Особенности приготовления PtokaX
Некоторые особенности работы скриптов на данном хабе
Продолжая тему. Предлагаю вашему вниманию простой скрипт:
Код
local iCheckInterval = 1

function OnStartup()
    TmrMan.AddTimer(iCheckInterval, "CheckPtokaX")
end

function CheckPtokaX()
    local sReport = ""
    local iDelta = 0
    local iCount = Core.GetUsersCount()
    local tUsers = Core.GetOnlineUsers()
    iDelta = iCount
    for _, _ in ipairs(tUsers) do
        iDelta = iDelta - 1
    end
    if iDelta ~= 0 then
        sReport = sReport.."ipairs = "..iDelta.."\n"
    end
    iDelta = iCount
    for _, _ in pairs(tUsers) do
        iDelta = iDelta - 1
    end
    if iDelta ~= 0 then
        sReport = sReport.."pairs = "..iDelta.."\n"
    end
    iDelta = iCount - #tUsers
    if iDelta ~= 0 then
        sReport = sReport.."# = "..iDelta.."\n"
    end
    if sReport ~= "" then
        Core.SendToOps(sReport)
    end
end

Суть проста, собрать всех пользователей через Core.GetOnlineUsers(), а потом сравнить число полученных пользователей с числом, возвращаемым Core.GetUsersCount(). Как уже было сказано, эти два числа не всегда могут быть одинаковыми. Но на одном хабе я обнаружил что второе количество (Core.GetUsersCount()) ПОСТОЯННО больше первого. "Постоянно" это значит, в рамках достаточно длительного интервала времени. Думаю что после старта хаба все нормально.
AfLc
22.1.2012, 22:22 Defend PM
API 2 | Полностью автоматическая защита ЛС от спама
Мой скрипт тоже не пишет текста сообщений. Он либо проверяет текст сообщения на слова, либо просто считает число отосланных ЛС.
AfLc
22.1.2012, 22:14 Defend PM
API 2 | Полностью автоматическая защита ЛС от спама
Можно, но такая функциональность уже встроена в хаб. Смотрите в настройках хаба флудообнаружение.

Замените функцию ToArrival на следующую:
Код
function ToArrival(tUser, sData)
    if tSpamUsers[tUser.sIP] == nil then
        tSpamUsers[tUser.sIP] = {}
    end
    if tSpamUsers[tUser.sIP][sToNick] == nil then
        tSpamUsers[tUser.sIP][sToNick] = true
        table.insert(tSpamUsers[tUser.sIP], sToNick)
    end
    local iCount = #tSpamUsers[tUser.sIP]
    local sReport = ""
    if iCount > iLimit then
        sReport = sReport.."*** Пользователь "..tUser.sNick.." с IP "..tUser.sIP.." отослал ЛС "..iCount.." разным пользователям за последние "..iClearTime.." минут. Возможно спам по ЛС. "
    end
    if iCount > iWarnLimit and iCount < iBanLimit then
        Core.SendToUser(tUser, "<"..sBot.."> *** Прекратите рассылать спам по личкам, иначе вы получите бан!")
        sReport = sReport.."Пользователь предупрежден. "
    end
    if iCount >= iBanLimit then
        BanMan.TempBanIP(tUser.sIP, iTimeBan, "Спам по ЛС", sBot, true)
        local sTimeBan = os.date("%d.%m.%Y %R", os.time() + iTimeBan*60)
        sReport = sReport.."Пользователь забанен до "..sTimeBan..". "
        local tUsers = Core.GetUsers(tUser.sIP)
        if tUsers ~= nil then
            for _, tSpamUser in pairs(tUsers) do
                Core.SendToUser(tUser, "<"..sBot.."> *** Вы были забанены до "..sTimeBan.." за спам по ЛС.")
                Core.Disconnect(tSpamUser)
            end
        end
        tSpamUsers[tUser.sIP] = nil
        sReport = sReport.."Отключено "..#tUsers.." пользователей."
    end
    if sReport ~= "" then
        Core.SendToOps("<"..sBot.."> "..sReport)
    end
end
AfLc, мамин_парень
22.1.2012, 16:12 User Mode Fixer
API 2 | Исправление режима подключения пользователя
Alex_lola, у меня есть подозрение, что это вопрос настроек твоего компа/хаба/фаервола/проброса портов (лишнее можно вычеркнуть).
Вот тебе кусок одной статистики хаба с примерно 1500 пользователей:
Цитата
MinOnlineActive = 1
OnlineActive = 499
MaxOnlineActive = 499

Так что у других актив работает.

Кстати, вот еще немного информации из той статистики, теперь уже для всех. Может кому интересно будет.
Использование памяти:
Цитата
MinMemoryUsage = 201
MemoryUsage = 388
MaxMemoryUsage = 910

Число пассивных пользователей:
Цитата
MinOnlinePassive = 1
OnlinePassive = 580
MaxOnlinePassive = 593

Число пользователей с переопределенным пассивом:
Цитата
MinOnlineFixedPassive = 1
OnlineFixedPassive = 326
MaxOnlineFixedPassive = 329

Теперь польза от скрипта:
Цитата
+FixedCTMIP = 22898 -- число исправленных запросов на подключение из за неверного IP
+FixedSearch = 10344 -- число исправленных поисковых запросов
+FixedCTM = 11423 -- число исправленных запросов на подключение
+FixedSearchIP = 2390 -- число исправленных поисковых запросов из за неверного IP

Время работы скрипта - порядка 10 часов.

ADD:
Новая версия 1.12.
Улучшена и доработана статистика. Ничего критичного не менялось. Теперь в статистике можно видеть сколько времени работает скрипт, сколько времени собиралась расширенная статистика, (если она включена, конечно) и среднюю скорость появления событий расширенной статистики:
Цитата
Время сбора статистики = 43 с

+FixedCTMIP = 1 (0.023255813953488 в секунду или 1 за 43 секунд)
+SendFixedMyINFO = 20 (0.46511627906977 в секунду или 1 за 2.15 секунд)
+SendFixedMyINFOs = 3 (0.069767441860465 в секунду или 1 за 14.333333333333 секунд)
+FixedSearch = 2 (0.046511627906977 в секунду или 1 за 21.5 секунд)
+TrueCheckedActive = 127 (2.953488372093 в секунду или 1 за 0.33858267716535 секунд)
+ValidCTMForBot = 143 (3.3255813953488 в секунду или 1 за 0.3006993006993 секунд)
+BlockedCTMToPassive = 2 (0.046511627906977 в секунду или 1 за 21.5 секунд)
+SendRCTMforBot = 146 (3.3953488372093 в секунду или 1 за 0.29452054794521 секунд)
+TimeoutConnect = 16 (0.37209302325581 в секунду или 1 за 2.6875 секунд)
rival, AfLc
22.1.2012, 14:52 Defend PM
API 2 | Полностью автоматическая защита ЛС от спама
Я отвечу цитатой.
Цитата
Цитата
Скажите мне, что все эти комментаторы сделали в своей жизни нового и интересного? Они вообще что-нибудь в ней создали? Пока что Я вижу, что у меня просто насрано в комментариях, больше НИ-ЧЕ-ГО!
[...]
Или эта позиция: «Ну, это Я уже видел. Это уже было. Дайте мне что-нибудь новенькое, чтобы Я поржал!» Ха-ха-ха!
Источник: http://mf0.me/videoobrascheniya/mr-freeman-part-63
Артём, мамин_парень
21.1.2012, 14:11 Defend PM
API 2 | Полностью автоматическая защита ЛС от спама
Название скрипта: Defend PM
Версия скрипта: 1.01
Платформа: PtokaX
Версия API: API2
Автор: Enyby

Описание: Скрипт предназначен для полностью автоматической защиты ЛС пользователей от спама. Выдает бан, при обнаружении спама.

Принципы работы скрипта:
Обычные пользователи отличаются от спамеров тем, что у обычных пользователей, если и пройдет ссылка на хаб, IP адрес или что-то подобное, то это будет разово. На этом и основана работа скрипта.
При получении ЛС оно проверяется на наличие стоп слов. Если стоп слова найдены, то список спамера пополняется очередным ником. Если ников стало больше предела уведомления операторов, то операторы уведомляются. Если больше предела предупреждений - пользователь предупреждается. Если больше либо равно пределу бана - пользователь уходит в бан.
Периодически запускается очистка, которая убирает по одному нику из списка спамера.
Таким образом идет учет количества отспамленных в интервале проверки. Чтобы спамить безнаказанно, нужно писать новым пользователям не чаще 1 раза в интервал. По умолчанию интервал 5 минут.

[attachment=6304:DefendPM.lua]

P. S. Если у вас нет регистрации на этом форуме, а значит вы не можете качать вложения, то скачать этот скрипт, равно как и другие, можно по ссылке Мои скрипты.
Nickolya, ustas, Tsd, rival, dka, bENNY!, AfLc, мамин_парень
21.1.2012, 2:27 Принятые и отосланые данные в PtokaX
Возможно ли уменьшить трафик?
Цитата(Ameet @ 27.11.2011, 4:05) *
поставил, ещё будут советы?

Там же, на первом скрине выбери:
  • в выпадающем списке - "всем профилям", для применения этой опции нужен рестартовать хаб. Под этим списком галочки снять.
  • из всех галок первой секции обязательной является только тэг, так что остальные можно снять.
  • минуты отправления можно поставить и 60, ничего особо страшного не будет, хотя и выигрыша тоже.


И вообще, все настройки птоки расписаны в местной вики.
мамин_парень
21.1.2012, 2:09 User Mode Fixer
API 2 | Исправление режима подключения пользователя
Ok. Подыму дефолт до 60 секунд.

ADD:
Кстати. Если на хабе присутствуют активные пользователи с неверными IP и включен режим исправлений команд, то при отключении скрипта (именно отключении, при перезапуске будет все нормально) их всех выкинет защита хаба от DDoS после первой же неверной команды. Так что после отключения скрипта число пользователей может уменьшаться.

ADD:
Составляется меню пользователя. Нужна ваша помощь.

Вот то, что накропал я:
Пункт меню 'Часто задаваемые вопросы'
1. При входе на хаб мне пишет "Ваш IP: xxx.xxx.xxx.xxx Ваш режим: xxxxxxxxx.". Что это такое?
Хаб сообщает вам ваши настройки текущего подключения, чтобы вы их видели, знали и могли исправить, если они не соответствуют тем, какими бы вы их хотели видеть.

2. Это сообщение кто-нибудь кроме меня видит?
Нет. Данное сообщение отправлено лично вам. Все остальные пользователи получают подобные сообщения, но со своими данными.

3. В сообщении указан не мой IP адрес! Мой IP совсем другой! Как такое может быть и что с этим делать?
В сообщении указан IP адрес, с которым вы вошли на хаб. Если он не соответствует IP адресу вашего компьютера, то вы находитесь за NAT или же используете прокси.
Делать ничего не нужно, все работает нормально.

4. Что означает "режим"?
Режим - это вид вашего подключения в сеть DC++. Он бывает двух видов "актив" и "пассив". В первом случае к вам могут присоединяться пользователи, а во втором случае - нет.
Лучшим является режим актива, поскольку вы можете качать со всех пользователей хаба. В пассиве же - только с тех пользователей, кто в активе. Так же в активном режиме лучше работает поиск.

5. Хорошо, режимов два, но в сообщении написано "пассив (переопределен)", как это понимать?
Активный режим предъявляет некоторые требования к пользователю, а именно:
- у него должен быть открыт порт для прямого подключения к нему других клиентов;
- IP адрес и порт должны быть доступны для подключения всех остальных пользователей.
Хаб выполняет, чтобы эти два пункта выполнялись для пользователей в активном режиме. Если проверка показала, что хотя бы один пункт не выполняется, то хаб сам переводит пользователя в пассивный режим.

6. Но пассивный режим это же плохо! Зачем тогда делать из активов пассивов?
Да, плохо. Но если вышеуказанные условия не выполняются, то активный режим еще хуже чем пассив: не работает ни поиск, ни скачивание с других пользователей. Именно поэтому режим и исправляется.

7. Я зашел на ваш хаб и тут работает поиск и скачивание, а на других хабах меня выкидывает с сообщением о неверном IP адресе. Почему?
На нашем хабе ваш IP адрес исправляется автоматически, а на остальных вам предлагают сделать это самостоятельно, настроив правильно свой DC++ клиент.

8. У меня рабочий актив, но при входе на хаб я вижу что меня переопределило в пассив, как мне сделать актив?
Вам нужно пробросить порт для того IP адреса, который вам пишет в сообщении. Номера портов указаны в настройках вашего DC++ клиента.

9. Чем отличается режимы "пассив" от "пассив (переопределен)" и какой лучше использовать?
Если вы точно знаете, что актив у вас не возможен, то тогда укажите в клиенте "пассив", это будет лучшим вариантом в данном случае.
Если вы можете настроить актив - настройте его. От этого вы будете только в выигрыше.
Практически эти режимы почти не отличаются, но при прочих равных условиях, предпочтительней режим "пассив":
- меньше нагрузка на хаб;
- меньше отсылаемых команд от вашего DC++ клиента;
- возможно некоторые пользователи, использующие расширения протокола NMDC смогут с вами соединиться.

10. У меня есть вопрос, но на него тут нет ответа? Что делать?
Обратитесь к одному из операторов хаба, он поможет вам найти нужные ответы.


Просьба подредактировать и/или дополнить желающим это меню. Возможно у вас на хабе пользователи что-то другое спрашивали.
Просьба принимать во внимание, что это меню должно быть максимально общим, так как будет дефолтным в скрипте. Все желающие смогут изменить его у себя как угодно.

ADD:
Новая версия 1.11.

Реализовано переопределение тэгов и пользовательское меню + мелкие фиксы.
mariner, rival, Kingston, AfLc
20.1.2012, 16:18 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Это вывод для отладки использования памяти в байтах.

Для четырех куч памяти снимается по два показателя.

  • TotalUncommitted Показывает, сколько байтов из TotalAddrSpace не находятся в swap-файле.
  • TotalCommitted Показывает, сколько байтов из TotalAddrSpace находятся в swap-файле. Соответственно, TotalCommited + TotalUncommited = TotalAddrSpace


Кучи памяти в порядке вывода:
  • PX total - вся птока;
  • Recv - куча для приема информации от клиентов;
  • Send - куча для отправки информации для клиентов;
  • LUA total - куча LUA. Не входит в PX total.
Ksan
20.1.2012, 15:44 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Для "спасибо" есть специальная кнопочка внизу каждого поста. Если пост помог - нажимаешь.
20.1.2012, 15:25 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Код
function ChatArrival(tUser, sData)    
    local  sCmd = sData:match("^%S+%s["..SetMan.GetString(29).."](%S+)")
    if sCmd and (sCmd:match("^stats?$") or sCmd:match("^memstats?$")) then
        if tUser.bOperator == nil then Core.GetUserData(tUser, 11) end
        if not tUser.bOperator then
            Core.SendToAll(sData)
            return true
        end
    end
end


Артём, твой вариант можно обойти. *stats, +stats и т. д.

UPD: Исправил ошибку.
roflDDDD
20.1.2012, 11:18 User Mode Fixer
API 2 | Исправление режима подключения пользователя
rival, если речь идет о пользователе "К@пит;-)шка", то он не ответил командой CTM на RCTM своевременно.
Варианта тут два, или он не ответил вообще или же ответил позже таймаута iTimeout в 15 секунд.
В первом случае проблема на стороне клиента и хаб тут ничего сделать не может.
Во втором случае можно попробовать увеличить таймаут. Хотя, согласно статистике, число несвоевременных CTM запросов к боту очень мало: +OtherCTMForBot = 3. Это может говорить о двух вещах - такая проблема только у этого пользователя или же что верен первый вариант.
Поставь версию 1.10 и пришли заново статисику, после входа на хаб, там будут дополнительные параметры.

Вышла версия 1.10.
Ничего критичного, только улучшения статистики. Тем не менее весьма советую, так как намного легче разбираться что да почему.
AfLc
19.1.2012, 3:03 Mailinator
Ест за вас ваш спам
Есть такой хороший сервис Mailinator.
Очень часто вам нужна регистрация на час. Или нужно ввести на каком-то сомнительном сайте свою почту, чтобы получить туда письма один раз. Это может быть активация на форум, где вам нужно скачать файл, а он без реги не доступен или еще что. Не важно. Главное, что почта нужна вам сейчас, а потом вам не нужен спам.
Тогда вы указываете почтовый ящик любое_ваше_имя@mailinator.com. После регистрации вы заходите на адрес "любое_ваше_имя.mailinator.com" и читаете пришедшее письмо и переходите по активационной ссылке, ну или еще что-то. Советую задавать имя аккаунта по-сложнее, иначе вы рискуете ковырятся в огромной куче спама. Это происходит обычно на распостраненных именах аккаунтов.

Важно помнить, что нельзя использовать этот сервис для чего-то важного. Только для однодневного. Это все потому, что любой может прочесть письма для любого ящика, только указав нужный аккаунт.

Если же домен mailinator.com внесен в черный список на каком-то сайте, то это не беда. Там же на сайте сервиса есть alias'ы для этого домена. Они выводятся в случаном порядке на картинку под заголовком "Alternate Domains:".

Есть еще одна интересная возможность. У любого такого почтового ящика есть два адреса, прямой и секретный. Например, enyby@mailinator.com и M8R-ou1ll2@mailinator.com. Второй адрес интересен тем, что если попытаться зайти в него напрямую, то в аккаунт enyby@mailinator.com не попадете. Это позволяет использовать данный адрес в качестве секретного, ведь только вы знаете настоящее имя ящика.
Секретный адрес выводится в самом ящике, сразу за надписью "Alternate Address for this Inbox:".

Ну и реализация этого проекта интересна. Насколько я помню это на Java крутится демон, на машине 1 ГБ оперативы, все письма там лежат. Спам отсеивается еще на входе, а письма хранятся крайне не долго, не помню точно, но что-то вроде суток. Есть в интернете статейка на тему. Сейчас сайт у них выключен, но это не беда.

Есть также RSS лента для каждого аккаунта и какой-то виджет. В интернете местами есть статьи на тему, даже в англовики есть. Жаль, что она на сутки бастовать начала.
Nickolya, Артём, dj hoodo
19.1.2012, 2:36 Особенности приготовления PtokaX
Некоторые особенности работы скриптов на данном хабе
Итак. Вводная:

HubVersion = 0.4.1.1
LuaVersion = Lua 5.1
OS = Windows_NT

Теперь по порядку.
  • Первый момент который меня поразил - при передаче измененного MyINFO в MyINFOArrival, оно уже отпарсено и изменения внесены в таблицу tUser. Так что искать там отличия бесполезно. Хотя по логике, казалось бы, обработка после успешного возврата. Из этого следует интересный факт: return true в данной функции не запретит обработку команды хабом, поскольку она вызывается ДО скриптов. Это только запрещает дальнейшую обработку другими скриптами.
  • Второй момент. Если вы возьмете всех юзеров командой Core.GetOnlineUsers(), посчитаете их количество через for ipairs(), а потом сравните с Core.GetUsersCount(), то не всегда эти два числа будут совпадать. Это особенно актуально, если у вас в скрипте есть таймер с малым временем перезапуска. Дело в том, что есть такие моменты при входе юзера, когда UserConnected уже вызвана, Core.GetUsersCount() возвращает увеличенное значение, а Core.GetOnlineUsers() - не возвращает этого юзера в результирующей таблице.


Думаю эта информция будет не лишней для разработчиков скриптов.
Nickolya, AfLc
19.1.2012, 0:55 Mellon DC Hub List
Проще всего в том же линукс выполнить
Код
php --ini
И не ломать голову, когда конфиг будет грузится не оттуда.
Правда это подходит не всем. Если php-cli, отличается от php-fpm, то тогда нужно на хостинг грузить файл с текстом и зайти на него в браузере:
Код
<?php phpinfo(); ?>
stailzoRE
19.1.2012, 0:51 Mellon DC Hub List
В коноли выполни
Код
php --ini

Консоль в Windows вызывается через меню Пуск -> Выполнить -> cmd
В линукс, думаю, сам найдешь.

В этом файле должна быть строчка с текстом
Код
extension=php_sockets.

Проследи, чтобы в начале нее не стояла точка с запятой. Само собой указанный файл должен лежать в папке ext с установкой php.

ADD:
Если на хостинге у тебя нет доступа к консоли, то спрашивай хостера. Если он скажет, что сокеты запрещены - меняй хостера.
stailzoRE
18.1.2012, 17:24 Принятые и отосланые данные в PtokaX
Возможно ли уменьшить трафик?
Цитата(Ameet @ 27.11.2011, 17:06) *
Tx (60 sec avg): 10.10 MB/s (3.72 MB/s)
Rx (60 sec avg): 28.75 kB/s (59.20 kB/s)

Статистика по скорости отправки и получения данных.

Цитата(roflDDDD @ 18.1.2012, 15:15) *
тоже интересно.. как еще можно снизить расход исходящего трафа? или чем задать максимальную исходящую скорость на крайняк? галки поставил, ничего не поменялось

  1. Использовать сжатие на хабе. Расширение ZOn.
  2. Ограничивать пассивный поиск.
  3. Не использовать скрипты переопределяющие MyINFO.
  4. Не держать больших текстовых файлов.
  5. Не держать скриптов с отправкой большого числа текста.
  6. Не держать скрипты навроде часов.
  7. Увеличить интервал обновления MyInfo.
  8. Сообщения о банах, ошибках, антифлуд сообщения должны быть максимально короткими. Можно вообще все простыни вынести на сайт, а на хабе ссылок понатыкать.
  9. Установить лимит на сообщения чата и ЛС, чтобы там не слали Войну и Мир.
  10. Посмотреть логи на предмет войн автоответчиков в ЛС. Можно не смотреть, а просто запретить отправку одинаковых сообщений от одного пользователя подряд.
  11. CDM отладчик в зубы + полный лог хаба хотя бы за 10 минут и можно смотреть что происходит.
  12. Увеличить интервал поиска.
  13. Ставить скрипты, которые будут ограничивать или блокировать пассивный поиск.
  14. Ограничивать число пользователей разными способами, отсеивая ненужных. Вариантов масса. Задрать пределы на шару, число хабов, скорость соединения, режим соединения и т. д.
  15. Ограничить число пользователей на хабе.
roflDDDD, мамин_парень
18.1.2012, 8:26 Что такое хороший хаб?
Немного рассуждений на тему критериев качества хаба
Что такое хороший хаб? Постараюсь изложить свои критерии и пояснения к ним.

  1. Отсутствие спама по личкам или в общем чате.
    Это касается любой информации, которую пользователь не запрашивал или знать ему ее не обязательно. В том числе и рассылки администрации.
    В личках такого не должно быть по определению, а в общем чате можно, но редко, чтобы он не превращался в помойку.
  2. Правила.
    Способствуют пониманию, что делать можно, а что нет.
  3. Стабильность работы.
    Должен быть стабильный график работы. Это не значит, что формат обязательно 24/7, хотя весьма желательно. Например, если у вас заявлено время с 18:00 до 23:00, то в это время он должен 100 % работать. Если вы не гарантируете, что в 18:00 он будет работать, укажите в графике работы время чуть позже, с запасом.
  4. Отсутствие грамматических ошибок.
    Мало кто захочет каждый день видеть неправильное написание слов. Да и первое впечатление о хабе сразу портится.
  5. Регистрация.
    Дает пользователю уверенность, что его ник не займет кто-то другой. Стимулирует желание пользователя вернуться снова.
  6. Последние n сообщений чата.
    Позволяет видеть сообщение пропущенные в результате вылета клиента и не задавать вопросы "Мне кто-то что-то писал, пока меня не было?".
    Число n не должно быть слишком большим или слишком маленьким. Обычно 20 сообщений должно хватать.
  7. Личка в оффлайн.
    Отличная возможность связаться с людьми, которых сейчас нет в чате.
  8. Обратная связь с администрацией.
    Должна включать в себя как ресурс на хабе (опчат, отсылка сообщения через меню), так и внешние средства связи (электронная почта, ICQ) на случай отказа хаба.
  9. Наличие приветствия (MOTD).
    Добавляет психологический комфорт, завершая процедуру входа на хаб. В чисто практических целях - позволяет понять, что вход на хаб завершен, что бывает полезно, при плохой связи.
    Отсылать приветствие в личных сообщениях - недопустимо, так как обычно ведется лог ЛС и это приводит к его неуемному разрастанию. Также это приведет к тому, что пользователь, скорее всего, поставит игнор на лички бота, так как при каждом перезаходе на хаб будет казаться, что кто-то ему что-то написал.
    Недопустимо в приветствии использовать ник пользователя - у большинства пользователей назначен звук, на цитирование их ника в чате - это будет создавать впечатление, что ему кто-то написал сообщение.
  10. Скрипты исправляющие неправильные настройки клиентов.
    Не все пользователи умеют настраивать клиенты, знать как пробрасывать порты и прочее. Большинству пользователей нужно чтобы они могли запустить программу и она работала. Это одна из причин популярности торрентов.


Интересно бы услышать ваши комментарии и дополнения.
Nickolya, Setuper, AfLc, Meloun
17.1.2012, 20:00 От: Redirect IP_mod
От темы с ID: 4572
Пинать таки будем.
Код
        WriteTable(tReportTo, "Admin", sPathToAdm)

А надо:
Код
        WriteTable(tReportTo, "tReportTo", sPathToAdm)

Иначе до лампочки все сохранения.

И неплохо бы отступы соблюдать, а то код плохо читается.
Артём
17.1.2012, 12:31 User Mode Fixer
API 2 | Исправление режима подключения пользователя
Вот это "наверное", очень под вопросом.

Посмотрел код NetworkSeparation_v1.3.1___API_2_____by_Nickolya___.lua - конфликтов не вижу. Правда скрипт может блокировать поисковые результаты пассивного поиска, если включено разделение сетей. Так что лучше его выключать на обкатке, чтобы было яснее, какой из скриптов виноват.
Kingston
16.1.2012, 13:15 User Mode Fixer
API 2 | Исправление режима подключения пользователя
На данный момент ситуация такая - при старте он проверяет всех пользователей сразу. Если их много, могут быть проблемы с одновременным подключением ко всем. Во-первых, это много коннектов, а, во-вторых, в реализации на windows socket_select используется битовые значения одного байта, а их 256.
Но по сути ничего страшного не произойдет, может просто определит кому-то пассив принудительно. Можно попробовать таймаут увеличить. Например, с 3 секунд до 15-20.
После старта может казаться что хаб завис, это нормально, оно пройдет. Сейчас неблокирующие сокеты. В случае блокирующих, подобные эффекты наблюдались на хабе с 160 пользователями. На данный момент скрипт работает на моем хабе, адрес которого в подписи. Сутки прошли - полет нормальный.
Основная проблема скрипта - старт. Если не хотите тяжелого старта, закомментируйте всю функцию OnStartup, тогда скрипт будет работать только для нововошедших пользователей.
После старта скрипт работает нормально и там проблем быть не должно.

Если совем будет туго, то я уже говорил, что перепишу на пул сокетов с очередью.

UPD:
Даже если на старте определит как переопределенный пассив, достаточно будет перезайти этим пользователям и ситуация нормализуется.

Еще одно. Скрипт потребляет неплохо память. На моем хабе это порядка 600 кб для 150 пользователей. Сейчас 130 кб на 116 человек. Прямой корреляции между числом пользователей и потреблением памяти не должно быть, скорее между числом переопределенных пассивов + нововошедших пользователей. Такж может влиять активность пользователей с переопределенным пассивом, так как скрипт берет на себя часть функций хаба.

В будущем прикручу статистику, чтобы можно было смотреть сколько человек с каким режимом присутствует на хабе.
Unique
15.1.2012, 20:02 User Mode Fixer
API 2 | Исправление режима подключения пользователя
Название скрипта: User Mode Fixer
Версия скрипта: 2.05
Платформа: PtokaX
Версия API: API2
Автор: Enyby
Автор идеи: Meloun

Библиотека: Для работы скрипта требуется библиотека Lua Socket

Описание: Скрипт предназначен для исправления режима подключения пользователей. Подменяет нерабочий актив на пассив в поиске и запросах на соединение.

Возможности скрипта:
При подключении нового пользователя, если он актив, то проверяется доступность порта для соединения. Если порт не доступен, то хаб переводит клиента в режим переопределенного пассива. В этом режиме поисковые команды преобразуются в пассивные, а CTM в RCTM.
При включении режима исправлений IP адресов и ников, скрипт исправляет команды с неверными данными. DDoS'еры получают DDoS на свой адрес, а обычные пользователи могут искать и качать даже с неверным внешним IP адресом и/или ненастроенном активе. Правда только как пассивы.

Дополнительная информация:
  • Возможно будут наблюдаться приличные тормоза хаба, сразу после включения и после входа большого числа пользователей единовременно. Большого числа пользователей в активном режиме. Если все в пассиве, то тормозов не будет. Начиная с версии 1.06 с этим проблем нет.
  • Также возможны глюки при входе более чем 255 активных пользователей одновременно. Если будет потребность в этом скрипте на крупных хабах - перепишу на использование очереди с пулом сокетов, в этом случае проблем быть не должно. Начиная с версии 1.06 с этим проблем нет.
  • Скрипт игнорирует команды расширений NMDC протокола: TLS Шифрование и NAT Traversal. Если включено исправление IP и ника в командах, то они будут исправлены и в командах указанных расширений.


Совместимость с другими скриптами:
  • Совместим со скриптами фильтрации поиска. Такие скрипты должны быть выше в списке скриптов, чем данный скрипт. Фильтрация поиска должна осуществляться запретом обработки команд поиска.
  • Совместим со скриптами запрещающими соединение пользователей (команды ConnectToMe и RevConnectToMe). Такие скрипты должны быть выше в списке скриптов, чем данный скрипт.
  • Частично совместим со скриптами использующими бота хаба как пассивного клиента (подключение через RevConnectToMe к боту хаба). Для работы с такими скриптами потребуется указать использование отдельного бота в скрипте (sBotName = "UserModeFixer").
  • Частично совместим со скриптами, которые подменяют MyINFO. Совместим только при bFixMyINFO = false.
  • Несовместим со скриптами, которые подменяют или самостоятельно обрабатывают команды соединения пользователей (ConnectToMe и RevConnectToMe). Данные команды обработаны этим скриптом не будут. Никаких ошибок не будет, но необработанные команды могут работать неверно.
  • Несовместим со скриптами подменяющими поиск или же которые сами организуют поиск. Эти команды поиска не будут обработаны скриптом. Никаких ошибок не будет, но необработанные команды могут работать неверно.


TODO list
  1. Сделать проверку на наличие на порту нужного DC клиента, так как там может быть случайно указан какой-то другой открытый порт. Увы, сокеты в луа не позволяют это выполнить с приемлимыми затратами.
  2. Сделать проверку активных (по присылаемому тэгу) клиентов не только при входе на хаб, но и периодически во время нахождения на хабе, так как за это время проброс портов может измениться. Да и не только он. Функция опциональна и должна быть отключаема. По дефолту включена. Интервал проверки должен задаваться отдельно. По умолчанию 1 час.
  3. Сделать проверку размера очереди. Если значение больше некоторого предела, то уведомлять операторов, возможно утечка в пуле или еще какие-то проблемы.

История версий
v2.05:
  • Реализована обработка отключения пользователей без вызова UserDisconnected.

v2.04:
  • Доработан отладочный вывод.

v2.03:
  • Добавлена дополнительная проверка для одного плавающего бага.

v2.02:
  • Доработан вывод ошибок
  • Добавлены дополнительные проверки
  • Доработана статистика

v2.01:
  • Исправлены дефолтные настройки

v2.00:
  • Ядро скрипта переписано заново
  • Своя система учета числа пользователей
  • Экономное расходование ресурсов пула

v1.13:
  • Улучшена и доработана статистика.
  • Исправлен баг, связанный с учетом отключений пользователей разных профилей
  • Добавлена опция отключения валидации через функцию PtokaX

v1.12:
  • Улучшена и доработана статистика.

v1.11:
  • Улучшена и доработана статистика.
  • Улучшена и доработана быстрая отладка.
  • Добавлена возможность использования пользовательского меню.
  • Добавлена возможность исправления тэгов пользователей.

v1.10:
  • Улучшена и доработана статистика.
  • Меню сделано зависимым от активных настроек скрипта.

v1.09:
  • Исправлена ошибка целостности.
  • Добавлено исправление целостности при ее нарушении.
  • Добавлена быстрая отладка.
  • Добавлена генерация репортов при валидации. Теперь репорты приходят адекватно.
  • Поддержка изменения режима подключения "на лету", без переподключения к хабу.

v1.08:
  • Переработан вывод статистики.
  • Добавлена опция валидации целостности.

v1.07:
  • Исправлен подсчет занятого пула.

v1.06:
  • Добавлена возможность исправления IP адресов и ников в командах.
  • Добавлена очередь с пулом.
  • Реализован мягкий старт скрипта. Никаких подвисаний на старте.
  • Добавлена возможность указания отдельного бота для скрипта.
  • Добавлена возможность ведения отладочного лога.

v1.05:
  • Исправлена ошибка двойной отсылки статистики.
  • Добавлены данные про хаб и ОС в статистику.

v1.04:
  • Исправлена ошибка в очищении таблицы сокетов.
  • Добавлена статистика.

v1.03:
  • Добавлена возможность игнорирования несовпадения IP адресов. Если она не включена - будет выкидывать с хаба с соответствующим сообщением.

v1.02:
  • Убрана возможность исправления IP. Потому как это только дополнительная нагрузка на хаб. Для работы этой опции нужно отключить встроенную защиту хаба от DDoS, что крайне опасно.

v1.01:
  • Добавлены проверки на предмет существования адресата CTM на хабе.
  • Добавлена возможность исправления CTM команд с неверным IP адресом. Полезна как дополнительная защита от DDoS и от кривых настроек активного режима у клиентов.
  • Добавлена возможность включить игнорирование несовпадения ников в CTM команде.
  • Содержит ошибки! В частности в 119 строке.

v1.00:
  • Первая версия. Публичный релиз.


[attachment=6312:UserMode...er_v2.05.lua]
Предыдущие версии
[attachment=6309:UserMode...er_v2.04.lua]
[attachment=6308:UserMode...er_v2.03.lua]
[attachment=6305:UserMode...er_v2.02.lua]
[attachment=6297:UserMode...er_v2.01.lua]
[attachment=6295:UserMode...er_v2.00.lua]
[attachment=6293:UserMode...er_v1.13.lua]
[attachment=6288:UserMode...er_v1.12.lua]
[attachment=6279:UserMode...er_v1.11.lua]
[attachment=6277:UserMode...er_v1.10.lua]
[attachment=6276:UserMode...er_v1.09.lua]
[attachment=6274:UserMode...er_v1.08.lua]
[attachment=6273:UserMode...er_v1.07.lua]
[attachment=6272:UserMode...er_v1.06.lua]
[attachment=6268:UserMode...er_v1.05.lua]
[attachment=6267:UserMode...er_v1.04.lua]
[attachment=6260:UserMode...er_v1.03.lua]
[attachment=6259:UserMode...er_v1.02.lua]
[attachment=6258:UserMode...er_v1.01.lua]
[attachment=6257:UserMode...er_v1.00.lua]
Предыдущие версии выложены, исключительно, для ознакомления с их исходным кодом. Это связано с тем, что я могу убрать из последней версии какой-то функционал, который вам может пригодится при написании своих скриптов. Если же вас интересует использование скрипта на своем хабе, настоятельно рекомендую использовать только последнюю версию. В старых версиях могут быть ошибки.


P. S. Если у вас нет регистрации на этом форуме, а значит вы не можете качать вложения, то скачать этот скрипт, равно как и другие, можно по ссылке Мои скрипты.
Nickolya, ustas, Tsd, mariner, Артём, PomanoB, rival, Kingston, LoT, Saymon21, AndreiDC, Damaks, nafig, Littlemuk, AfLc, graforlof, мамин_парень, Unique
9.1.2012, 20:55 Instahub
Instant PtokaX-based Hub with scripts (API2)
Может у кого-то остался скачанный вариант. У того и просите. Например у nafig.
8.1.2012, 14:29 RegmeEmail
API2 | Регистрация через e-mail
Вижу в коде переменную iDelay, которая не инициализирована. Первый раз используется в указанной строке, а второй раз передается в
Код
    Core.SendToUser(tUser, ("<%s> Пароль отправлен на адрес: (e-mail). Письмо с вашим паролем было успешно отправлено (Message with your password was sent successfully)"):format(sBot, iDelay))

Но в строку формата не подставляется.

Более того, судя по названию переменной это целое число. А выводится как строка.
Дальше. Судя по сообщению скрипта, должен быть таймаут повторной регистрации. Его нет. Во всяком случае в коде я его не вижу.

Как экспресс фикс, можно в начале скрипта написать:
Код
iDelay = "5"

Но это неправильный подход.

UPD:
Резюмируя, могу сказать, что скрипт требует переделки, если предлагается реализовывать заявленный функционал.

Если же не переделывать, то достаточно изменить так:

Код
function Regme(tUser)
  local sEmail = cmd.msParams
  if tMailList[sEmail] then
    return nil, ("С введённым вами e-mail адресом уже зарегистрирован пользователь. Если письмо не пришло на ящик, для перерегистрации обратитесь к оператору.")
  end
  local sPasswd = GetPass()
  local res, err = email.SendMail(sEmail, sSubject, GetMsg(tUser.sNick, sPasswd))
  if res then
    RegMan.AddReg(tUser.sNick, sPasswd, iRegProfile)
    Core.SendToOps("Зарегистрировался юзер с ником "..tUser.sNick)
    tMailList[sEmail] = tUser.sNick
    tNickList[tUser.sNick] = sEmail
    Save(tMailList, "tMailList", sFile)
    tNoActivate[tUser.sNick] = true
    Core.SendToUser(tUser, ("<%s> Пароль отправлен на адрес: (e-mail). Письмо с вашим паролем было успешно отправлено (Message with your password was sent successfully)"):format(sBot))
  end
  return res, err
end
Ameet
3.1.2012, 2:43 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Цитата(MIKHAIL @ 3.1.2012, 0:50) *
Вопрос: есть ли существенная разница между
Код
function GetData(sData)

и
Код
GetData = function(sData)

???

Тест

Код:
Код
function ChatArrival(tUser, sData)
  local iLimit = 10*1000*1000
  
  local iStart = os.time()
  for i = 0, iLimit, 1 do
    function GetData(sData)
        sData = "0"
    end
  end
  Core.SendToAll(" " .. os.difftime(os.time(), iStart));
  
  iStart = os.time()
  for i = 0, iLimit, 1 do
    GetData = function(sData)
        sData = "0"
    end
  end
  Core.SendToAll(" " .. os.difftime(os.time(), iStart));
end

Результат:
Код
[01:40:49] * 10
[01:40:49] * 11

Вывод:
Все естественно. Во втором случае создается безымянная функция, которая присваивается в переменную, а во втором случае, все то же самое, только функция имеет имя сразу. На этом и выигрыш.

MIKHAIL
3.1.2012, 2:16 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Это вопрос или утверждение?

ADD:
Цитата(MIKHAIL @ 1.1.2012, 23:46) *
Согласно Сообщение #1, п. 4 нижеуказанная замена подпадает под этот метод оптимизации? А именно, имеющийся код:
Код
local data = string.sub(data,1,-2)

заменить на:
Код
local data = data:sub(1,-2)

Тест
Код:
Код
function ChatArrival(tUser, sData)
  local iLimit = 10000000
  
  local sData = 'Sample text'
  local sResult= '';
  
  local iStart = os.time()
  for i = 0, iLimit, 1 do
    sResult = string.sub(sData, 1, -2)
  end
  Core.SendToAll(" " .. os.difftime(os.time(), iStart));
  
  iStart = os.time()
  for i = 0, iLimit, 1 do
    sResult = sData:sub(1, -2)
  end
  Core.SendToAll(" " .. os.difftime(os.time(), iStart));
end

Результат:
Код
[00:57:07] * 11
[00:57:07] * 9

Вывод:
ООП вариант быстрее (это тот, который через двоеточие).


PS Если охота заниматься "блошиной" оптимизацией, то пиши сам подобные скрипты и проверяй что быстрее, не так уж они и сложны.
И да, "выигрыш" нереально "крут" - 2/10 000 000 секунд с одного оператора на моей машине. Так что не стоит заморачиваться.

ADD:
Цитата(MIKHAIL @ 1.1.2012, 21:19) *
Скажите, пожалуйста, какой вариант кода в данном случае будет быстрее работать?
Вариант №1:
Код
local sData1 = "0"
local sData2 = "0"

или вариант №2:
Код
local sData1 = "0"
local sData2 = sData1

Тест
Код:
Код
function ChatArrival(tUser, sData)
  local iLimit = 100*1000*1000
  
  local sData1 = ''
  local sData2 = ''
  
  local iStart = os.time()
  for i = 0, iLimit, 1 do
    sData1 = "0"
    sData2 = "0"
  end
  Core.SendToAll(" " .. os.difftime(os.time(), iStart));
  
  iStart = os.time()
  for i = 0, iLimit, 1 do
    sData1 = "0"
    sData2 = sData1
  end
  Core.SendToAll(" " .. os.difftime(os.time(), iStart));
end

Результат:
Код
[01:08:04] * 15
[01:08:04] * 18

Вывод:
Первый вариант быстрее. На три секунды. При 100 миллионном повторении. extreme_sexy_girl.gif

Цитата(MIKHAIL @ 1.1.2012, 21:19) *
Есть ли, опять же, в данном случае разница (существенная, на глубинном уровне) в коде и какова в данном случае?
Вариант №1:
Код
local sData = "0"

Вариант №2:
Код
local sData = 0

Тест
Код:
Код
function ChatArrival(tUser, sData)
  local iLimit = 30*1000*1000
  
  local iData1 = ''
  local iData2 = 0
  
  local iStart = os.time()
  iData2 = "0"
  for i = 0, iLimit, 1 do
    iData1 = "1"
    iData2 = iData2 + iData1
  end
  Core.SendToAll(iData2 .. " " .. os.difftime(os.time(), iStart));
  
  iStart = os.time()
  iData2 = 0
  for i = 0, iLimit, 1 do
    iData1 = 1
    iData2 = iData2 + iData1
  end
  Core.SendToAll(iData2 .. " " .. os.difftime(os.time(), iStart));
end

Результат:
Код
[01:14:33] *30000001 18
[01:14:33] *30000001 6

Вывод:
Если у вас число, то быстрее будет как число. Не будете лишний раз конвертировать.
MIKHAIL
2.1.2012, 23:29 Способы Повышения Производительности
методы оптимизации lua кода
Ну и что. На 10 млн проверок (!) нужно порядка 10 секунд, на не самой быстрой машине. Т. е. порядка 1 млн проверок в секунду. Это не существенно. У вас юзеров за спам забанит намного раньше.

ADD:
Цитата(MIKHAIL @ 2.1.2012, 22:11) *
Enyby, Вы так "жёстко" определили где команда, а где сообщение. Это понятно, правильно. Но ведь есть разные случаи жизни, кто-то ошибается с вводом команды... и получается сообщение... по разным причинам. Или кто-то подбирает команды... а в результате могут получатся и команды, и сообщения.

А так и есть. Все варианты не предугадаешь. Так что и не стоит даже заморачиваться. Завтра кошка будет по клавиатуре бегать, так вы скрипт анти кошка писать будете? big_smile.gif
Цитата(MIKHAIL @ 2.1.2012, 22:11) *
Код
[22:07:31] 127.0.0.1 | ??    на хабе    Находится <ВВВВВВВВВВВВВВВВВВВВ> test

Уточните, пожалуйста, что это?

Это вывод в ДС клиенте сообщения в чат. Временной штамп, ип, страна, локация/провайдер, ник и само сообщение.
Чтоб было понятнее - запустите тестовый скрипт и отправьте сообщение.
Правда хаб подвисает на время брожения в циклах. Так что это нормально.

ADD:
В общем стоит задача отсеять "возможно команды" от точно "не команд". Все что началось не с префикса - командой быть не может. А если есть префикс, то тогда нужно регулярку, захватывать текст и проверять что это, известная команда или отсебятина. В любом случае, это будет менее ресурсоёмко, чем проверка каждого сообщения регуляркой.
MIKHAIL
2.1.2012, 23:10 Способы Повышения Производительности
методы оптимизации lua кода
А? Ты че-то не то пишешь. Или не туда. Тут речь о префиксах команд. Т. е. о наименее ресурсоёмком определение, что именно прислал пользователь - команду или текстовое сообщение в чат.
"!regme" - это команда
"Привет всем!" - это сообщение.
В первом случае скрипт должен отработать и что-то сделать, перехватив вывод команды в чат, а во-втором, пропустить сообщение в чат, ничего не выполняя, с наименьшими затратами ресурсов.

ADD:
Продолжая тему оптимизации.
Тест
Код:
Код
function ChatArrival(tUser, sData)
  local iPos = #tUser.sNick + 4
  local iLimit = 10000000
  local sChar = '!'
  local iChar = sChar:byte(1);
  local iCounter = 0;
  
  local iStart = os.time()
  iCounter = 0
  for i = 0, iLimit, 1 do
    if sData:sub(iPos, iPos):find('!', 1, true) then
        iCounter = iCounter + 1
    end
  end
  Core.SendToAll(iCounter .. " " .. os.difftime(os.time(), iStart));
  
  iStart = os.time()
  iCounter = 0
  for i = 0, iLimit, 1 do
    if sData:sub(iPos, iPos) == '!' then
       iCounter = iCounter + 1
    end
  end
  Core.SendToAll(iCounter .. " " .. os.difftime(os.time(), iStart));
  
  iStart = os.time()
  iCounter = 0
  for i = 0, iLimit, 1 do
    if sData:byte(iPos) == iChar then
       iCounter = iCounter + 1
    end
  end
  Core.SendToAll(iCounter .. " " .. os.difftime(os.time(), iStart));
end

Результат:
Код
[22:18:22] *10000001 19
[22:18:22] *10000001 11
[22:18:22] *10000001 10
[22:18:22] 127.0.0.1 | ??    на хабе    Находится <ВВВВВВВВВВВВВВВВВВВВ> !say test
[22:19:11] *0 18
[22:19:11] *0 11
[22:19:11] *0 9
[22:19:11] 127.0.0.1 | ??    на хабе    Находится <ВВВВВВВВВВВВВВВВВВВВ> test

Вывод:
Самый быстрый способ - использование byte, для получения кода конкретного символа.


UPD: Исправил ошибку в коде.

PS что интересно, так это четко видная буферизация вывода. В клиент все пришло одновременно, независимо от того, что отдельные строки отсылались с разрывом порядка 10 секунд.
Alexey, MIKHAIL
2.1.2012, 11:33 Способы Повышения Производительности
методы оптимизации lua кода
#tUser.sNick - число символов в нике
4 - число символов до начала сообщения:
Код
<Ник> Сообщение|

В данном случае длина ника составляет 3 символа, а смещение 4 переходит вперед по символам "<> ", пропуская их. Таким образом это будет позиция первого символа сообщения.

ADD:
Цитата(Setuper @ 23.9.2010, 9:09) *
Наиболее оптимизированный вариант:

Код
function ChatArrival(tUser, sData)
  local iPos = #tUser.sNick + 4
  if sData:sub(iPos, iPos):find('!', 1, true) then --поиск префикса команды

    -- дальнейшие действия (в том числе поиск и сравнение команд)

  end
end


Есть код:
Код
function ChatArrival(tUser, sData)
  local iPos = #tUser.sNick + 4
  local iLimit = 10000000
  local sChar = ''
  local iStart = os.time()
  for i = 0, iLimit, 1 do
    sChar = sData:sub(iPos, iPos):find('!', 1, true)
  end
  Core.SendToAll("" .. os.difftime(os.time(), iStart));
  iStart = os.time()
  for i = 0, iLimit, 1 do
    sChar = sData:sub(iPos, iPos) == '!'
  end
  Core.SendToAll("" .. os.difftime(os.time(), iStart));
end

Есть результат:
Цитата
[10:27:50] *16
[10:27:50] *8
[10:27:50] 127.0.0.1 | ?? на хабе Находится <ВВВВВВВВВВВВВВВВВВВВ> test

Есть вывод:
Прямое сравнение быстрее любых find'ов.

ADD:
Другой вопрос, если префиксов несколько. Там или циклом или регуляркой.
Alexey, MIKHAIL
1.1.2012, 11:57 Kinozal_tv
API2 | Скрипт новостей с трекера
Assert:
Цитата
assert (v [, message])
Issues an error when the value of its argument v is false (i.e., nil or false); otherwise, returns all its arguments. message is an error message; when absent, it defaults to "assertion failed!"

http://www.lua.org/manual/5.1/manual.html#pdf-assert

Require:
Цитата
require (modname)

Loads the given module. The function starts by looking into the package.loaded table to determine whether modname is already loaded. If it is, then require returns the value stored at package.loaded[modname]. Otherwise, it tries to find a loader for the module.

To find a loader, require is guided by the package.loaders array. By changing this array, we can change how require looks for a module. The following explanation is based on the default configuration for package.loaders.

First require queries package.preload[modname]. If it has a value, this value (which should be a function) is the loader. Otherwise require searches for a Lua loader using the path stored in package.path. If that also fails, it searches for a C loader using the path stored in package.cpath. If that also fails, it tries an all-in-one loader (see package.loaders).

Once a loader is found, require calls the loader with a single argument, modname. If the loader returns any value, require assigns the returned value to package.loaded[modname]. If the loader returns no value and has not assigned any value to package.loaded[modname], then require assigns true to this entry. In any case, require returns the final value of package.loaded[modname].

If there is any error loading or running the module, or if it cannot find any loader for the module, then require signals an error.

http://www.lua.org/manual/5.1/manual.html#pdf-require

Судя по условиям, assert вылетит тогда, когда библиотека будет состоять их нескольких модулей, причем тот модуль, который указан в качестве параметра require будет, а другого не будет. Тогда require из загрузчика вернет false и assert выдаст сообщение.
MIKHAIL
31.12.2011, 19:13 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Реально все. Это лишь вопрос времени и ресурсов.

Это не кодировка. Это способ эйскепирования символов юникода в кодировках, его не поддерживающих.
В данном конкретном случае надо разбить шестнадцетиричное число, идущее после "/u", на две части, перевести эти части в байты. Полученная последовательность байт будет юникодом, который можно прогнать через Utf8ToAnsi.
MIKHAIL
31.12.2011, 9:26 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Код
"\u041d\u0430\u0443\u043a\u0430 \u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438" == "Наука и технологии"

http://dukehome.kiev.ua/docs/JavaScript/Ja...ialsymbols.html
MIKHAIL
28.12.2011, 22:33 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Навскидку: умножить на нужное число, потом округлить и поделить обратно. Например, для трех знаков это будет: round(3,141592654 * 1000) / 1000
MIKHAIL
27.12.2011, 3:05 Ваши Вопросы И Предложения По Поводу Форума
Хе-хе. А бага-то уже нет...
Nickolya
25.12.2011, 13:17 Ваши Вопросы И Предложения По Поводу Форума
Это вообще псевдо код с датами "от фонаря". Важна идея. Чтобы не забывать.
Nickolya
25.12.2011, 0:24 Ваши Вопросы И Предложения По Поводу Форума
Вижу проблему в Опере 9.63. При клике на картинке оверлей (серое нечто, должное прикрывать сайт от клика), ставится по размеру экрана, а не на весь размер сайта. И остается это, затемненное чудо, в самом верху страницы. При этом можно открыть несколько увеличенных картинок сразу. Главное чтобы они были разными, дубликаты не открываются.
Собственно предложение: Или убрать оверлей или сделать его рабочим. Я не знаю как он там работает, может растягиваться должен, а не растягивается на сколько надо. А может надо position: fixed или компенсировать скроллирование на JS.

ADD:
Цитата(Nickolya @ 19.12.2011, 11:33) *
Setuper, да, в этом году что-то припозднились... забыл я совсем про НГ. правда шапку вернуть - пара кликов big_smile.gif

Можно же сделать условный оператор:
Код
if (date('dd.mm') > '25.12' && date('dd.mm') < '14.01')
    include 'new_year.tpl';
else
    include 'header.tpl';
Nickolya
24.12.2011, 9:56 Переделка скриптов
Прошу помощи
Проверил с ip-to-country.csv. Работать не будет. Причина проста - соответствие аббревиатур и их расшифровок жестко зашиты в PtokaX.
Тогда только второй вариант. Например так:
Код
tDiaps = {
    {"192.168.0.1", "192.168.0.255", "ISP 1"},
    {"192.168.32.1", "192.168.32.255", "ISP 2"},
    {"192.168.34.1", "192.168.34.255", "ISP 2"},
    {"10.0.0.1", "10.0.50.255", "Corbina"},
    {"127.0.0.1", "127.255.255.255", "Loopback"},
}

function OnStartup()
    for _, tDiap in ipairs(tDiaps) do
        tDiap[4] = ipToLong(tDiap[1])
        tDiap[5] = ipToLong(tDiap[2])
    end
end

function getDiapName(sIP)
    local iIP = ipToLong(sIP)
    for _, tDiap in ipairs(tDiaps) do
        if tDiap[4] <= iIP and iIP <= tDiap[5] then
            return tDiap[3]
        end
    end
    return "Unknown"
end

function ipToLong(sIP)    
    local _, _, iFirst, iSecond, iThird, iFourth = sIP:find("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")
    return ((iFirst*256 + iSecond)*256 + iThird)*256 + iFourth
end

function UserConnected(tUser)
local Profile = (ProfMan.GetProfile(tUser.iProfile) and ProfMan.GetProfile(tUser.iProfile).sProfileName) or "Guest"
Core.SendToUser(tUser,"\n[::] Информация: \n[::] : Ник " ..tUser.sNick.." \n[::] Класс : "..Profile.." ("..tUser.iProfile..") \n[::] Ваш ip: "..tUser.sIP.." \n[::] Провайдер: "..getDiapName(tUser.sIP).."\n")
end
RegConnected = UserConnected
OpConnected = UserConnected
Fe(one)X
24.12.2011, 3:29 Переделка скриптов
Прошу помощи
Цифры это ип. Начальный и конечный для диапазона. Тебе нужно сделать следующее: устанавливаешь ипы на нужные, а потом меняешь название страны, не трогая ее аббревиатуру. Именем страны будет служить имя провайдера.
Ип рассчитывается как: ((A*256 + B)*256 + C)*256 + D где A.B.C.D - это IP адрес.
Например: 192.168.0.1 => ((192*256 + 168)*256 + 0)*256 + 1 = 3232235521
Fe(one)X
24.12.2011, 2:45 Переделка скриптов
Прошу помощи
Fe(one)X
21.12.2011, 9:00 Public PHP hublist (Хаблист) by Enyby
Публичный открытый хаблист на PHP
index.php
Цитата
<td class="status status-<?php echo htmlspecialchars($row['online'] == 1 ? "0" : '4'); ?>">
<span<?php echo ($row['online'] != 1 and $row['date'] != '') ?
' tooltip="Последний раз онлайн: '.htmlspecialchars($row['date']).'"' : '';
?>><?php echo htmlspecialchars($row['status']); ?></span>
</td>

Часть выделенным жирным можно заменить на вывод картинки, например, так:
Код
<img src="status/<?php echo urlencode($row['status']); ?>.png" />

Дальше создать папку status с картинками, названными согласно статусам в БД. Желательно в таблице статусов изменить все наименования на анголоязыные: "Статус" => "status" и т. д.

По поводу провайдера - еще одно поле в базу данных, а потом добавить вывод на страницу.

Подумываю переписать на использование шаблона.
dj hoodo
21.12.2011, 8:41 Tiny Hublist
Программа для создания хаблистов
Цитата(dj hoodo @ 20.12.2011, 4:21) *
Ато предыдущий криво пинговал некоторые хабы

Если речь о моей поделке, то можно было бы хотя бы сообщить что не так, в соответствующей теме.
Цитата(dj hoodo @ 20.12.2011, 4:21) *
1 Явно инетные хабы опредиляются как локальная сеть. В одном случае действительно хаб находился за NAT и имел адрес 10.***
Во втором случае еще не разобрался - домен резолвится на инет адрес но хаблист показывает лок сеть.

Переделать резолв с адреса хаба в его настройках, на адрес хаба, записанный в хаблисте.
Цитата(dj hoodo @ 20.12.2011, 4:21) *
2 Добавил иконки хаб софта, но некоторые хабы отдают софт с версией и вместо картинки просто название YnHub 1.036.

Предлагаю обрезать название до пробела. Должно хватить для однозначной идентификации.
Цитата(dj hoodo @ 20.12.2011, 4:21) *
А некоторые отдают прописными буквами . - в винде такое бы прокатило наверное Verlihub вместо VerliHub, но в линуксе не прокатывает.
можно конечно дописать (продублировать) эти значения в скрипт.. или есть другой вариант?

Привести все названия софта к нижнему регистру и проблем не будет.
dj hoodo
17.12.2011, 0:07 IP2Country
База адресов
Исправил.
Артём
16.12.2011, 19:57 Mellon DC Hub List
Код
if ( !socket_connect( $socket, $data['address'], $data['port'] ) )
        {
            echo 'Error..';
            return;
        }

Этот участок приводит к тому, что если не удается установить соединение с каким-то хабом, то пингование всех последующих не происходит.
Вот пример:
Код
Starting xdn.msk.ru

End xdn.msk.ru

[...]

Starting 89.151.129.239

End 89.151.129.239

Hub if offline.
Warning: socket_connect() [function.socket-connect]: unable to connect [0]: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера. in D:\Site\xdn.msk.ru\hub\bot.php on line 138
Error..

Пример был взят с адреса http://xdn.msk.ru/hub/bot.php

Второе. Нет никакого таймаута. Если добавить хаб с адресом yandex.ru и портом 80, то бот затыкается и висит.

Третье. В демо есть какие-то проблемы с пейджингом. Если зайти на вторую страницу, то хабов будет 13 штук, т. е. и те 3, которые должны быть на третьей странице. К слову они там будут. Так же неверно проставлены номера хабов. Нумерация на каждой странице начинается заново.

Кстати. Некий dro уже выкладывал на этом форуме код пингера, очень похожего на этот.

Мне без разницы кто у кого воровал и воровал ли. Мои комментарии к коду пингера можно посмотреть по ссылке: http://mydc.ru/index.html?showtopic=404&am...ost&p=33135
Nickolya
15.12.2011, 17:48 От: Mellon DC Hub List
От темы с ID: 5060
Цитата(Mellon @ 2.12.2011, 15:52) *
Данный срипт [...]

Срипт являеться [...]

Может сКрипт?
Maximum
14.12.2011, 19:49 Хаблисты
Некоторое количество хаблистов
На просторах интернета нашел некоторое количество хаблистов. Да простит меня Ksan, выложу их сюда, чтобы они не пропали даром. Может кого-то это сподвигнет на создание своего.

Итак:
  1. A Drupal module for creating online Direct Connect hublist
    [attachment=6192:hublist_6.x_1.0.rar]
    [attachment=6193:hublist_....0_beta1.zip]
    Уворовано с: http://sourceforge.net/projects/elitedc/
  2. Java Extended ADC&NMDC Hublist & Pinger
    [attachment=6201:jexhls_0.7.1.tar.gz]
    [attachment=6202:jexhls_0.7.5.tar.gz]
    Уворовано с: http://sourceforge.net/projects/jexhls/
  3. Best HUBList - DC++ HUB Management
    Написан на PHP.
    [attachment=6194:hublist_v1.1.rar]
    [attachment=6195:hublist_v1.2.rar]
    [attachment=6196:hublist_v1.3.rar]
    [attachment=6197:hublist_v1.4.rar]
    [attachment=6199:hublist_v1.5.rar]
    [attachment=6200:hublist_v1.6.rar]
    уворовано с: http://sourceforge.net/projects/hublist/


Ну и, для не знающих, на этом форуме можно найти несколько разных хаблистов.
Nickolya, CrazyKiller, bENNY!, killserver, dj_crazy_joker
14.12.2011, 18:55 Public PHP hublist (Хаблист) by Enyby
Публичный открытый хаблист на PHP
Добавил в шапке версию 0.03 и ссылки на демо.
dj hoodo
4.12.2011, 9:48 Базы CustomLocations.zip
Ссылки на готовые базы
На данный момент нашел всего два проекта, по данной теме, заслуживающие внимания:
  1. http://ipdip.org/
  2. http://gl.sdims.ru/customloc/ ( http://www.assembla.com/wiki/show/dFin_GPU8r3QJieJe5afGb )
Прямые ссылки:
  1. http://ipdip.org/file/CustomLocations.zip (62,8 мб)
  2. http://dc.sdims.ru/cl/repo/customlocations.zip (2,2 мб)

Поддерживается формат базы CustomLocations, введенный в 5.94 версии DC++ клиента GreyLink:
Цитата
Теперь это ZIP-архив, где иконки сетей представлены каждая отдельным bmp-файлом. ini-файлов в архиве может быть несколько (разделение по сетям, городам или провайдерам) для удобства редактирования. Страна вычисляется вычисляется отдельно от провайдера (при наличии файла GeoIPCountryCSV.zip). В новом формате у ip-диапазона можно указать город, а городу назначить флаг.
Nickolya
3.12.2011, 19:42 IP2Country
База адресов
http://inethub.olvi.net.ua/db/
Автоматом собирается 1 раз в день, в 5 утра. Есть CSV и архивы. Для DC и для PtokaX.
Со временем может что-то еще появится.
Канал слабый, но что есть, то есть.
Nickolya, Alexey, Saymon21, Meloun
3.12.2011, 12:50 От: Mellon DC Hub List
От темы с ID: 5060
Цитата(Mellon @ 3.12.2011, 10:36) *
Проект с 2004 года и дизайн там был изначально этот уж скорее dchublist.ru угнали дизайн у jkoffa или тех кто был до него (а если быть точным первая версия dchublist.ru была основана как раз на этом скрипте), ты об этом мало что знаешь (так как тебя тогда не было)

Цитата(Ksan @ 3.12.2011, 11:30) *
Интересно было бы услышать комментарии оппонента на эту тему. big_smile.gif

А что тут комментировать? Ноу комментс. Могу только сделать вывод, что оппонент считает что мне и 8 лет нет. Его право. Завтра он скажет, что он на Марс пешком ходит. Я что врач ему?

Diff лога я не вижу, говорить не о чем.

PS Кстати, меня позабавила та реплика
Цитата(Mellon @ 3.12.2011, 10:36) *
Твой скрипт как то раз пробовал поставить там пришлось многое переписать что бы заработало спс за гемор ))

Оппонент не смог меня "задавить" в рамках мужской логики и перешел на женскую. Кому интересно, есть интересная статья "Заметки по женской логике" на эту тему.

UPD:
Пока писал, пришел очередный ответ:
Цитата(Mellon @ 3.12.2011, 11:40) *
Времени просто нет если честно, меня уже год выложить просят (так что это не моя инициатива) тем более писать посты. Просили ? я выложил, наслаждайтесь, все равно каждый останется при своем мнении как бы там ни было на самом деле...

Ну что я могу сказать... Слив защитан.
Я мог бы тут рассказывать что меня тоже просят не один день, но не вижу смысла. Что более интересно, это то что за всех уже все "решено". Т. е. уже предопределено что
Цитата(Mellon @ 3.12.2011, 11:40) *
каждый останется при своем мнении как бы там ни было на самом деле
. Это мне напоминает одну историю:
Цитата
Какой-то ученый вынес на суд академии новое открытие, на что ему было отвечено: "Такого не может быть, потому что такого не может быть никогда. А если бы и было, то было бы давно уже открыто и изучено." Имя ученого и что за открытие я не помню.
-=ДЕМОН=-
3.12.2011, 1:51 От: Mellon DC Hub List
От темы с ID: 5060
Цитата(Mellon @ 2.12.2011, 15:52) *
Описывать так же и оформлять ничего не хочу данный хаблист является рабочим модификом хаблста от jkoff - который давал мне лично jkoff он значительно отличался от того что лежит на этом сайте или уважаемый товарищ VOVKT пытался мне его пихнуть.

Разъяснение.
С JKoff я разговаривал изначально все писал он далее взял человека который будет ему помогать, который его подставил полагаю этот человек основал проект Small и пытался продать то что Jkoff делал своими руками своим трудом причем бесплатно для народа и.т.п.. это крайне не красиво было, решил его поддержать от того весь кипишь..

Такие хаблисты типо как Small или от Enyby есть подозрение что тоже модификации моего или jkoff но мы в отличии от этих авторов не пытаемся чего то доказать что это мы написали хоть и на самом деле их хаблисты это всего лишь плагиат. Моё уважение заслужил лиж только один проект Tiny Hublist это действительно хоть и не очень функциональный но собственный проект а не копипаст копипаста моего хаблиста или жкоффа

По скольку в том что я установил от Enyb ничего похожего на его демо вообще не увидел, похоже на издевательство над юзерами и их дезинформацией.

О... Я думал ты так и не отважишся кинуть камень в меня публично.

Ну что ж. Давайте расставим все точки над i.

Во-первых, хаблист ценен, в первую очередь, реализацией пингера. В данном вопросе у моего хаблиста есть неоспоримое преимущество, поскольку я осилил неблокирующие сокеты и мой хаблист позволяет пингование 70 хабов менее чем за 5 минут.

Во-вторых, судить по дизайну о "слизанности" хаблиста - полнейшее профанство. Вон ВКонтакте "слил" дизайн у Facebook в начале своего существования, но никто же не вопит, что ВК это украденный FB, ибо дело тут в наполнении а не форме.
Я ни капли не скрываю, что брал дизайн dchublist.ru за основу. Впрочем как и подавляющее большинство хаблистов.

Цитата(Mellon @ 2.12.2011, 15:52) *
Такие хаблисты типо как Small или от Enyby есть подозрение что тоже модификации моего или jkoff но мы в отличии от этих авторов не пытаемся чего то доказать что это мы написали хоть и на самом деле их хаблисты это всего лишь плагиат.
Ога, да. "Все ****расы, а я д'Артаньян". Этой фразой ставим сразу в положение виноватого, теперь я должен оправдываться и рассказывать, что я не верблюд. Не дождетесь. Давайте diff лог, а после этого поговорим у кого что списано. До этого ваши слова лищь пустой треп уровня бабки на завалинке.

И да, мне кажется что вам не знакомо значение слова модификация: "видоизменение, преобразование, появление новых свойств." (с) БСЭ.
Например, FreeBSD НЕ яляется модификацией BSD, в виду того что она была переписана ко второй версии.

В-третьих, на счет отличий моего релиза и проекта. Там вроде значится что это прародитель. И там есть ссылки на развернутый релиз в двух местах.

Вот-с.

Ах да, еще. Позвольте кинутся какашкой в вашем стиле. "Все хаблисты уворованы у dchublist.ru, ибо у них одинаковый дизайн. Ну там табличка на странице хаба и все такое". Ну или, как минимум, уворован дизайн. ;-) И да, товарищ святой Mellon и его брат jkoff, вы тоже так же поступили. Или вы скажете что это dchublist.ru у вас украл дизайн? Или то что они сильно похожи - совпадение?

Тэкс. Пожалуй на этом все. Ах нет, еще спасибо, за релиз кода. Нажимать кнопку "спасибо" в посте я не хочу, ибо там много гадостей написано.

За сим считаю тему исчерпаной. по крайней мере до той поры, пока мне не покажут что-то весомее пустого трепа из серии "а я вот считаю".
-=ДЕМОН=-
23.11.2011, 11:27 Public PHP hublist (Хаблист) by Enyby
Публичный открытый хаблист на PHP
В работе этого хаблиста существует ограничение - не более 256 хабов. Когда их количество станет больше этого числа, пингование перестанет работать. Это связано с реализацией функции php socket_select (под Windows точно работать не будет, а вот под Unix - нужно тестировать). Чтобы обойти это ограничение вам потребуется переписать код пингера на использование пула сокетов. В пуле должно быть не более 256 сокетов одновременно.
dj_crazy_joker

5 страниц V  < 1 2 3 4 > » 
RSS Сейчас: 26.4.2024, 10:41