إدخال وإخراج غير حاجب باستخدام luasocket
استخدم luasocket في الوضع غير الحاجب مدمجًا مع مجدول للبرامج التعاونية
إدخال وإخراج غير حاجب باستخدام luasocket درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
ما هو luasocket؟
إن luasocket مكتبة Lua توفر مقابس TCP/UDP وعملاء HTTP وFTP وSMTP. وهي حاجزة افتراضيًا؛ بينما يتيح الوضع غير الحاجز تنفيذ عمليات إدخال وإخراج غير متزامنة.
تثبيت luasocket
ثبّته عبر LuaRocks باستخدام: luarocks install luasocket. ثم استورده في البرنامج النصي.
local socket = require("socket")
local tcp = socket.tcp()إنشاء مقبس TCP
أنشئ مقبس عميل TCP واتصل بخادم.
local tcp = socket.tcp()
tcp:connect("example.com", 80)
tcp:send("GET / HTTP/1.0\r\nHost: example.com\r\n\r\n")
local response = tcp:receive("*a")
tcp:close()
print(response:sub(1, 200))الوضع غير الحاجز
اضبط المقبس على الوضع غير الحاجز باستخدام tcp:settimeout(0). وتُرجع عمليات القراءة والكتابة النتيجة فورًا مع خطأ انتهاء المهلة إذا لم تكن البيانات جاهزة.
tcp:settimeout(0) -- non-blocking
local data, err = tcp:receive(1024)
if err == "timeout" then
-- no data yet, try again later
elseif data then
print("Got:", data)
endالدمج مع Coroutines
ادمج المقابس غير الحاجزة مع coroutines: نفّذ yield عندما لا تكون البيانات جاهزة، واستأنف coroutine عندما يشير المحدِّد إلى جاهزية المقبس.
local function readAsync(sock)
while true do
local data, err = sock:receive(1024)
if data then return data end
if err ~= "timeout" then error(err) end
coroutine.yield() -- let other tasks run
end
endsocket.select
تُرجع socket.select(readSet, writeSet, timeout) مجموعات المقابس الجاهزة لعمليات الإدخال والإخراج — وهي الأساس لحلقة أحداث سليمة.
local readable, writable = socket.select({sock1, sock2}, nil, 0.1)
for _, s in ipairs(readable) do
local data = s:receive(1024)
-- handle data
endعميل HTTP
تتضمن luasocket وحدة HTTP عالية المستوى للطلبات البسيطة.
local http = require("socket.http")
local body, code = http.request("http://example.com")
print(code, #body)مقابس UDP
إن UDP عديم الاتصال. استخدم socket.udp() للاتصال القائم على مخططات البيانات.
local udp = socket.udp()
udp:setsockname("*", 0)
udp:sendto("hello", "127.0.0.1", 9999)
local data = udp:receive()
udp:close()المهلات
اضبط مهلة باستخدام :settimeout(seconds). تعني المهلة 0 عدم الحجب؛ ويسمح الرقم الموجب بالحجب الجزئي؛ بينما تعني nil الحجب إلى أجل غير محدد.
نمط معالجة الأخطاء
تُرجع دوال luasocket nil مع سلسلة خطأ عند الفشل. احرص دائمًا على فحص قيمة الإرجاع الثانية.
local ok, err = tcp:connect("host", 80)
if not ok then
error("Connection failed: " .. tostring(err))
endبديل OpenResty
بالنسبة إلى عمليات الإدخال والإخراج غير الحاجزة الجاهزة للإنتاج في LuaJIT، تكون cosockets الخاصة بـ OpenResty أكثر قدرة وأعلى أداءً بكثير. استخدم luasocket للبرامج النصية المستقلة والأدوات البسيطة.
سؤال حول الوضع غير الحاجز
ماذا تفعل tcp:settimeout(0)؟
مراجعة: عمليات الإدخال والإخراج غير الحاجزة
استخدم settimeout(0) للمقابس غير الحاجزة، وsocket.select لتعدد إرسال عمليات الإدخال والإخراج. وادمج ذلك مع coroutines: نفّذ yield عند انتهاء المهلة، واستأنف التنفيذ عند جاهزية البيانات. ولعمليات الإدخال والإخراج غير المتزامنة عالية الأداء، فضّل OpenResty أو luv.
الأسئلة الشائعة
هل درس «إدخال وإخراج غير حاجب باستخدام luasocket» مجاني؟
نعم — نص درس «إدخال وإخراج غير حاجب باستخدام luasocket» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «إدخال وإخراج غير حاجب باستخدام luasocket»؟
استخدم luasocket في الوضع غير الحاجب مدمجًا مع مجدول للبرامج التعاونية تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «إدخال وإخراج غير حاجب باستخدام luasocket»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إنشاء حلقة أحداث بسيطة
- Async/Await باستخدام البرامج التعاونية
- أنماط شبيهة بالوعود
- إدخال وإخراج غير حاجب باستخدام luasocket