0Pricing
Lua Academy · Ders

Cosocket'ler ve Engellemesiz TCP

content_by_lua içinde eşzamansız arka uç bağlantıları için ngx.socket.tcp kullanın.

Cosocket'ler ve Engellemesiz TCP, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.

Cosocket'ler Nedir?

OpenResty cosocket'leri, Nginx'in olay döngüsüyle bütünleşen engellemesiz TCP/UDP soketleridir. Veri beklerken coroutine'i askıya alır ve worker'ın diğer istekleri işlemesini sağlar.

TCP Cosocket'i Oluşturma

Bir cosocket oluşturmak için ngx.socket.tcp() kullanın. Bağlanma, gönderme ve alma işlemleri, G/Ç engellenecek olduğunda otomatik olarak askıya alınır.

-- content_by_lua_block
local sock = ngx.socket.tcp()
local ok, err = sock:connect("redis.local", 6379)
if not ok then
  ngx.log(ngx.ERR, "Connect failed: ", err)
  return ngx.exit(500)
end

Veri Gönderme

sock:send(data) bir dize gönderir. Gönderilen bayt sayısını veya nil + hata döndürür.

local bytes, err = sock:send("PING\r\n")
if not bytes then
  ngx.log(ngx.ERR, "Send error: ", err)
end

Veri Alma

sock:receive(pattern) veri okur. Desenler: "*l" bir satır okur, "*a" kapanana kadar tüm veriyi okur, bir sayı ise tam olarak N bayt okur.

local data, err = sock:receive("*l")
if not data then
  ngx.log(ngx.ERR, "Receive error: ", err)
  return ngx.exit(500)
end
ngx.say("Response: " .. data)

Zaman Aşımlarını Ayarlama

Asılı kalmayı önlemek için bağlanma, gönderme ve alma zaman aşımlarını ayarlayın.

sock:settimeout(1000)  -- 1 second timeout
-- or separate timeouts:
sock:settimeouts(1000, 5000, 5000)  -- connect, send, receive (ms)

Bağlantı Havuzu

sock:setkeepalive(timeout, pool_size), soketi yeniden kullanılmak üzere bir havuza geri koyar. Redis/MySQL performansı için kritik öneme sahiptir.

sock:setkeepalive(60000, 100)  -- 60s timeout, pool size 100

HTTP İsteği Yapma

Bir cosocket kullanarak basit bir HTTP/1.0 GET isteği uygulayın.

local function httpGet(host, path)
  local sock = ngx.socket.tcp()
  sock:connect(host, 80)
  sock:send("GET " .. path .. " HTTP/1.0\r\nHost: " .. host .. "\r\n\r\n")
  local resp = sock:receive("*a")
  sock:close()
  return resp
end

UDP Cosocket'i

ngx.socket.udp() bir UDP cosocket'i oluşturur. statsd ölçümlerini raporlamak için kullanışlıdır.

local udp = ngx.socket.udp()
udp:setpeername("statsd.local", 8125)
udp:send("requests:1|c")

Hata İşleme Deseni

Tüm cosocket yöntemleri Lua kuralını izler: hata durumunda nil + hata dizesi döndürür. Her zaman her iki dönüş değerini de kontrol edin.

Cosocket Sınırlamaları

Cosocket'ler şu yerlerde kullanılamaz: init_by_lua, set_by_lua, header_filter_by_lua. Bunları yalnızca content, access ve rewrite aşamalarında kullanın.

Performans Karşılaştırması

Cosocket'ler, doğrudan Nginx'in G/Ç mekanizmasını kullandıkları için ham epoll tabanlı C koduyla aynı aktarım hızına ulaşır. Ek iş parçacığı veya süreç yükü oluşturmaz.

Cosocket Sorusu

Bir cosocket yavaş bir sunucudan veri beklerken ne olur?

Özet: Cosocket'ler ve Engellemesiz TCP

OpenResty cosocket'leri, G/Ç sırasında askıya alınan engellemesiz TCP/UDP sağlar ve yüksek eşzamanlılığı mümkün kılar. Bağlantı havuzlama için setkeepalive kullanın. Asılı kalmayı önlemek için zaman aşımlarını ayarlayın. Yalnızca content/access/rewrite aşamalarında kullanılabilir.

Sıkça Sorulan Sorular

“Cosocket'ler ve Engellemesiz TCP” dersi ücretsiz mi?

Evet — “Cosocket'ler ve Engellemesiz TCP” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.

“Cosocket'ler ve Engellemesiz TCP” dersinde ne öğreneceğim?

content_by_lua içinde eşzamansız arka uç bağlantıları için ngx.socket.tcp kullanın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Lua Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Cosocket'ler ve Engellemesiz TCP” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. OpenResty Mimarisi
  2. Lua'da HTTP İsteklerini İşleme
  3. Cosocket'ler ve Engellemesiz TCP
  4. Paylaşılan Bellek Sözlükleri
← Lua Academy Sayfasına Dön