distri.lua — это фреймворк для синхронизации и сетевых операций на Lua, который помогает разработчику быстро создавать серверы онлайн-игр, веб-приложений, легкие распределённые системы и так далее.
Основные возможности включают:
distri.lua распространяется под лицензией GPL.
Установите libcurl.
Установите Lua версии 5.2.
Клонируйте репозиторий.
Отправьте обратную связь и сообщите о проблемах на трекере ошибок.
в Ubuntu
sudo apt-get install libssl-dev
sudo apt-get install libreadline-dev
make
в FreeBSD
gmake
тест pingpong
./distrilua samples/hello.lua
./distrilua samples/pingclient.lua
тест rpc
./distrilua samples/rpcserver.lua
./distrilua samples/rpcclient.lua
local http = require "lua.http"
http.createServer(function(req, res)
res.writeHead(200, "OK", {["Content-Type"] = "text/plain"})
res.end("Привет, мир\n")
end):listen("127.0.0.1", 8001)
print("Сервер создан на 127.0.0.1 8001")
сервер
local socket = require "lua.socket"
local timer = require "lua.timer"
local sche = require "lua.sche"
``` local count = 0
local s = Socket.Datagram.New(CSocket.AF_INET, 1024, Socket.Datagram.RDecoder())
s:Listen("127.0.0.1", 8010)
Sche.Spawn(function ()
while true do
local rpk, from = s:Recv()
--print(from[1], from[2], from[3])
count = count + 1
s:Send(Socket.WPacket(rpk), from)
end
end)
local last = C.GetSysTick()
local timer = Timer.New():Register(function ()
local now = C.GetSysTick()
print(string.format("count:%d", count * 1000 / (now - last)))
count = 0
last = now
end, 1000):Run()
клиент
local Socket = require "lua.socket"
local s = Socket.Datagram.New(CSocket.AF_INET, 1024, Socket.Datagram.RDecoder())
for i = 1, 3 do
local wpk = Socket.WPacket(1024)
wpk:Write_string("hello")
s:Send(wpk, {CSocket.AF_INET, "127.0.0.1", 8010})
end
while true do
local rpk, from = s:Recv()
s:Send(Socket.WPacket(rpk), from)
end
Тест RPC
---------
сервер
local TcpServer = require "lua.tcpserver"
local App = require "lua.application"
local RPC = require "lua.rpc"
local Timer = require "lua.timer"
local Sche = require "lua.sche"
local Socket = require "lua.socket"
local count = 0
local rpcserver = App.New()
rpcserver:RPCService("Plus", function(_, a, b)
count = count + 1
return a + b
end)
local success
local success = not TcpServer.Listen("127.0.0.1", 8000, function(client)
print("новый клиент")
rpcserver:Add(client:Establish(Socket.Stream.RDecoder()))
end)
if success then
print("сервер запущен на 127.0.0.1:8000")
local last = C.GetSysTick()
local timer = Timer.New():Register(function()
local now = C.GetSysTick()
print(string.format("cocount:%d,rpccount:%d,elapse:%d",
Sche.GetCoCount(), count * 1000 / (now - last), now - last))
count = 0
last = now
end, 1000):Run()
else
print("ошибка при запуске сервера")
end
клиент
local Socket = require "lua.socket"
local App = require "lua.application"
local RPC = require "lua.rpc"
local Sche = require "lua.sche"
local rpcclient = App.New() for i = 1, 10 do
Sche.Spawn(function()
local client = Socket.Stream.New(CSocket.AF_INET)
if client:Connect("127.0.0.1", 8000) then
print("соединение с 127.0.0.1:8000 завершено успешно")
return
end
rpcclient:Add(client:Establish(Socket.Stream.RDecoder()), nil, on_disconnected)
local rpcHandler = RPC.MakeRPC(client, "Plus")
for j = 1, 100 do
Sche.Spawn(function(client)
while true do
local err, ret = rpcHandler:Call(1, 2)
if err then
print("ошибка RPC: " .. err)
client:Close()
return
end
end
end, client)
end
end)
end
тест клиента Redis
------------------
local Redis = require "lua.redis"
local Sche = require "lua.sche"
local Timer = require "lua.timer"
local count = 0
local toredis
local function connect_to_redis()
print("здесь")
if toredis then
print("соединение с Redis прервано")
end
toredis = nil
Sche.Spawn(function()
while true do
local err
err, toredis = Redis.Connect("127.0.0.1", 6379, connect_to_redis)
if toredis then
break
end
print("попытка соединения через 1 секунду")
Sche.Sleep(1000)
end
end)
end
Подключение к Redis
Пока toredis не установлен
Sche.Yield()
local err, result = toredis:CommandSync("hmget test nickname")
Если result существует
Для каждого k, v в result
Выведите k, v
Конец
Конец
См. Survive
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )