сокеты в модах?

Статус
В этой теме нельзя размещать новые ответы.

Endo

Новичок
Автор темы
11
0
Lua может отправлять и принимать данные через сокет в скриптах?
 

deddosouru

Смотрю аниме, служу Сатане
Друг
2,036
1,317
Lua может отправлять и принимать данные через сокет в скриптах?
Снимок.PNG
можно юзнуть сокет либу конечн. но тут есть некие подводные камни. @4el0ve4ik вроде говорил что игра будет висеть пока не придет ответ
 

FYP

Известный
Администратор
1,758
5,720
@4el0ve4ik
Lua:
local lanes = require 'lanes'.configure()

f = lanes.gen('', function(n) return 2 * n end)
f2 = lanes.gen('',
    function(n)
       local sockethttp = require 'socket.http'
       for i = 1, n do
           local r, err = sockethttp.request('http://google.com/robots.txt')
           print('ping')
       end
       return 'success'
    end
)

function main()
    a = f(1)
    b = f(2)
    suc = f2(10):join(1.5)
    print(a[1], b[1])

    wait(-1)
end
если это он
 
  • Нравится
Реакции: eiuhuth

uczoja62

Новичок
74
4
@FYP, второй поток в этом примере не выполняется (print не выводится) и ошибок нет. Первый возвращает 2 4, как в документации. Есть варианты исправления? Или, может, я чего не понимаю? Если задать "return r", и попробовать вывести через print в main, то вернет nil.
Очень нужно обеспечить подгрузку html-страницы каждые 5 минут без подвисания игры.
 
Последнее редактирование:

FYP

Известный
Администратор
1,758
5,720
@uczoja62 это дерьмовый пример. многопоточность в луа - довольно каверзная вещь. в луа вообще нет никакой встроенной потокобезопасности, поэтому модулям, добавляющим многопоточность, приходится использовать нестандартные методы. в частности, библиотека lanes создаёт отдельный lua state для каждого потока, загружая стандартные библиотеки и расшаривая с ним некоторые функции по возможности (если не ошибаюсь, функции с upvalues использовать из таких потоков невозможно), и т.к. lanes загружает стандартные библиотеки, функция print в новом потоке перезаписывается стандартной. но даже если этого не было бы, print мунлоадера всё равно нельзя было использовать, т.к. она не потокобезопасна.
в общем, такие потоки нужно хорошо изолировать от основного скрипта, чтобы не было проблем, а обмен данными осуществлять посредством сообщений или другим способом, доступным в библиотеке.
я с lanes почти не работал и не разбирался, как и с другими модулями, реализующими многопоточность, но в llthreads2 обмен данными между потоками осуществляется посредством сообщений и сама библиотека выглядит намного проще, попробуй её.
 

Вложения

  • llthreads2.zip
    62.5 KB · Просмотры: 23
  • Нравится
Реакции: deStrange
Статус
В этой теме нельзя размещать новые ответы.