IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 26 Haziran 2021, 11:04   #1
Çevrimdışı
~ TalkIRC.Net ~
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Yeni Başlayanlar için Node.js




Node.js'e başlamayı zorlaştırabilecek olay-yönelimli programlama yeni başlayanlar için zor olabilir. Ama sakın vazgeçmeyin; bu makalede, Node.js'in temellerinden birkaçını gösterecek ve neden bu kadar ünlü olduğunu açıklayacağım.

Giriş
Node.js kullanmaya başlamak için, ilk önce Node.js ile geleneksel sunucu-taraflı kodlama ortamı (örn. PHP, Python, Ruby, vesaire) arasındaki farkları anlamalısınız.

Eşzamansız Programlama
Node.js karmaşık uygulama yaratımlarını kolaylaştırmak için bir modül mimarisi kullanır.

Eşzamansız programlamaya aşinalık çok iyi olacaktır, herşeyden önce Ajax'deki "A" odur (İngilizce sözcükle). Node.js'deki her fonksiyon eşzamansızdır. Bu yüzden, normal şartlarda program işleyişini kilitleyecek herşey, arka planda çalıştırılır. Node.js ile ilgili unutulmaması gereken en önemli şey budur. Örneğin, dosya sistemi üzerindeki bir dosyayı okuyorsanız, okuma işlemi tamamlandığında çalıştırılacak bir geriçağrı fonskiyonu belirtmek zorundasınız.

Herşeyi Yapıyorsunuz!
Node.js yalnızca bir ortamdır - anlamı herşeyi kendiniz yapmanız gerekiyor. Varsayılan bir HTTP sunucusu yoktur, yada bu bağlamda herhangi bir sunucu. Yeni kullanıcılar için bu biraz yıldırıcı olabilir, ama karşılığı yüksek performanslı bir web uygulamasıdır. Bir kod istemcilerle olan tüm iletişimi halleder. Bu da uygulama tarafından kullanılan kaynak sayısını kayda değer şekilde düşürür. Örneğin, işte basit bir Node.js uygulamasının kodu:

var i, a, b, c, max;

max = 1000000000;

var d = Date.now();

for (i = 0; i < max; i++) {
a = 1234 + 5678 + i;
b = 1234 * 5678 + i;
c = 1234 / 2 + i;
}

console.log(Date.now() - d);
Ve işte PHP'deki karşılığı:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
$a = null;
$b = null;
$c = null;
$i = null;
$max = 1000000000;

$start = microtime(true);

for ($i = 0; $i < $max; $i++) {
$a = 1234 + 5678 + $i;
$b = 1234 * 5678 + $i;
$c = 1234 / 2 + $i;
}

var_dump(microtime(true) - $start);
Şimdi kıyaslama sayılarına bakalım. Aşağıdaki tablo bu iki basit uygulamanın yanıt sürelerini, milisaniye olarak listeler:

Tekrarlama sayısı Node.js PHP
100 2.00 0.14
10'000 3.00 10.53
1'000'000 15.00 1119.24
10'000'000 143.00 10621.46
1'000'000'000 11118.00 1036272.19
İki uygulamayı da sunucunun uygulamaların derlenmesini geciktirmemesi için komut satırından çalıştırdım. Her testi on kez çalıştırdım ve ortalama sonuçlara ulaştım. PHP az sayıdaki tekrarlamalarda bariz şekilde hızlı, ama bu avantaj tekrarlama sayısı arttıkça çabucak eriyip gidiyor. Herşey bittiğinde, PHP Node.js'ten 93% daha yavaş!

Node.js hızlıdır, ama onu gerektiği gibi kullanmak için birkaç şeyi öğrenmeniz gerekecek.

Modüller
Node.js karmaşık uygulamaların yaratımını kolaylaştırmak için bir modül mimarisi kullanır. Modüller, C'deki kütüphanelere, ya da Pascal'daki birimlere benzerler. Her modül modülün "konusuyla" ilgili bir dizi fonksiyon içerir. Örneğin, http modülü HTTP'ye özel fonksiyonları içerir. Node.js dosya sistemindeki dosyalara erişim, HTTP ve TCP/UDP sunucuları yaratma ve diğer kullanışlı işlevleri gerçekleştirmenize yardımcı olacak birkaç ana sıradışı modül sunar.

Bir modülü içermek kolaydır; sadece require() fonksiyonunu çağırın, şunun gibi:

var http = require('http');
Node.js yalnızca bir ortamdır; herşeyi kendiniz yapmalısınız.

require() fonksiyonu belirtilen modüle başvuru döndürür. Bu kodun özelinde, bir http modül başvurusu http değişkeninde saklanır.

Yukarıdaki kodda, bir modül ismini require() fonksiyonuna geçtik. Bu Node'un uygulama dizininizde node_modules'ü, ve o dizinde http modülünü aramasına neden olur. Node node_modules dizinini bulamazda (ya da içinde http modülünü), o zaman global modül önbelleğini tarar. Gerçek bir dosyayı, göreceli ya da kesin yolu geçirerek de belirtebilirsiniz, şunun gibi:

var myModule = require('./myModule.js');
Modüller kod bölümlerini içerir. Bir modül içindeki kod genellikle özeldir - yani içlerinde tanımlandıkları fonksiyonlar ve değişkenler yalnızca modül içinden erişilebilirdir. Bununla birlikte,modül dışında kullanılması için fonksiyon ve/veya değişkenleri açığa çıkartabilirsiniz. Bunun için, exports nesnesini kullanın ve onun özelliklerini ve yöntemlerini açığa çıkartmak istediğiniz kod bölümleriyle doldurun. Aşağıdaki modülü bir örnek olarak düşünün:

var PI = Math.PI;

exports.area = function (r) {
return PI * r * r;
};

exports.circumference = function (r) {
return 2 * PI * r;
};
Bu kod yalnızca modül içinde yer alan kod tarafından erişilebilen bir PI değişkeni yaratır; modül dışında erişilebilir değildir. Sonra, exports nesnesi üzerinde iki fonksiyon yaratılır. Bu fonksiyonlar modül dışında erişilebilirdirler çünkü exports nesnesi üzerinde tanımlıdırlar. Sonuç olarak, PI tamamen dış müdahaleye karşı korumalıdır. Bu yüzden, area() ve circumference() yöntemlerinin daima olması gerektiği gibi davranacağından emin olabilirsiniz (r parametresi için bir değer sağlandığı sürece).


Global Kapsam
Node Google'ın V8 JavaScript moturunda çalışan bir JavaScript ortamıdır. Bundan dolayı, istemci-taraflı geliştirme için kullandığımız en iyi pratikleri takip etmeliyiz. Örneğin, herhangi birşeyi global kapsama koymaktan kaçınmalıyız. Ki, yine de, her zaman mümkün değildir. Node'da global kapsam GLOBAL'dir(gözatıcıdaki window'un tersine), ve var sözcüğünü altayarak kolayca global bir değişken fonksiyonu yaratabilirsiniz:

globalVariable = 1;
globalFunction = function () { ... };
Bir kez daha söylemek gerekirse, globallerden mümkün olduğunca kaçınılmalıdır. Bu yüzden dikkatli olmalı ve bir değişken tanımında var kullanılmalıdır.

Kurulum
Doğaldır ki, bir uygulama yazıp çalıştırmadan önce Node'u yüklememiz gerekir. Kurulum çok basittir, Windows ya da OS X kullanıyorsanız; nodejs.org websitesi bu işletim sistemlerinin kurucularını sağlar. Linux'ta, herhangi bir paket yöneticisini kullanın. Terminalinizi açın ve şunu yazın:

sudo apt-get update
sudo apt-get install node
ya da:

sudo aptitude update
sudo aptitude install node
Node.js sid depolarındadır; kaynakları listenize eklemeniz gerekebilir:

sudo echo deb [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] sid main > /etc/apt/sources.list.d/sid.list
Ama eski sistemlerde sid paketlerinin kurulmasının sisteminizi bozabileceği aklınızda olsun. Dikkatli olun, ve Node'un kurulumu bittikten sonra /etc/apt/sources.list.d/sid.list'i kaldırın.

Yeni Modüllerin Kurulması
Node.js'nin Node Package Manager (NPM-Node Paket Yöneticisi) bir paket yöneticisi vardır. Node.js ile birlikte kendiliğinden kurulur, ve yeni modülleri kurmak için NPM'yi kullanırsınız. Bir modülü kurmak için, terminalinizi/komut satırını açın, istenilen dizine gidin, ve aşağıdaki komutu çalıştırın.

npm install module_name
Hangi işletim sisteminizin olduğu önemli değildir; yukarıdaki komut module_name'in yerine belirttiğiniz modülü kuracaktır.

Hello World Uygulaması
Pek tabii ki, ilk Node.js kodumuz konsola 'Hello World!' metnini yazdıracak. Bunun için hello.js adında bir dosya yaratın, ve aşağıdaki kodu girin:

console.log('Hello World!');
Şimdi kodu çalıştıralım. Terminalinizi/komut satırını açın, hello.js'yi içeren dizini gezin, ve aşağıdaki komutu derleyin:

node hello.js
Konsolda görüntülenen 'Hello World!'ü görmeniz gerekiyor.

HTTP Sunucu
Haydi daha gelişmiş bir uygulamaya geçelim; merak etmeyin sandığınız kadar karmaşık değil. Aşağıdaki kodla başlayalım. Düşülen notları ve ardından aşağıdaki açıklamayı okuyun.

// Include http module.
var http = require("http");

// Create the server. Function passed as parameter is called on every request made.
// request variable holds all request parameters
// response variable allows you to do anything with response sent to the client.
http.createServer(function (request, response) {
// Attach listener on end event.
// This event is called when client sent all data and is waiting for response.
request.on("end", function () {
// Write headers to the response.
// 200 is HTTP status code (this one means success)
// Second parameter holds header fields in object
// We are sending plain text, so Content-Type should be text/plain
response.writeHead(200, {
'Content-Type': 'text/plain'
});
// Send data and end response.
response.end('Hello HTTP!');
});
// Listen on the 8080 port.
}).listen(8080);
Bu kod çok basit. response.write() metodunu kullanarak istemciye daha fazla veri gönderebilirsiniz, ama bunu response.end()'i çağırmadan önce yapmalısınız. Bu kodu http.js olarak kaydedin ve şunu konsolunuza yazın:

node http.js
Gözatıcınızı açın ve [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] adresini girin. Sayfada "Hello HTTP!" metnini görmelisiniz.

URL Parametrelerinin İşlenmesi
Daha önce bahsettiğim gibi, Node'da herşeyi kendimiz yapmamız gerekiyor, istek argümanlarının ayıklanması da dahil. Bu, yine de, oldukça basit. Aşağıdaki koda bir göz atın:

// Include http module,
var http = require("http"),
// And url module, which is very helpful in parsing request parameters.
url = require("url");

// Create the server.
http.createServer(function (request, response) {
// Attach listener on end event.
request.on('end', function () {
// Parse the request for arguments and store them in _get variable.
// This function parses the url from request and returns object representation.
var _get = url.parse(request.url, true).query;
// Write headers to the response.
response.writeHead(200, {
'Content-Type': 'text/plain'
});
// Send data and end response.
response.end('Here is your data: ' + _get['data']);
});
// Listen on the 8080 port.
}).listen(8080);
Bu kod ana bir Node.js modülünü, isteğin URL'sini bir nesneye çevirmek için, url modülünün parse() yöntemini kullanır, Döndürülen nesnenin URL'nin parametrelerinin alan bir query özelliği vardır. Bu dosyayı get.js olarak kaydedin ve aşağıdaki komutla çalıştırın:

node get.js
Ardından gözatıcınızla [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] adresine gidin. Doğaldır ki, data parametresinin değerinin değiştirilmesi kodu bozmayacaktır.

Dosyaları Okuma ve Yazma
Node'da dosyaları yönetmek için, fs modülünü (ana bir modül) kullanıyoruz. Dosyaları okumak ve yazmak için, sırasıyla fs.readFile() ve fs.writeFile() yöntemlerini kullanıyoruz. Aşağıdaki koddan sonra argümanları açıklayacağım:

// Include http module,
var http = require("http"),
// And mysql module you've just installed.
fs = require("fs");

// Create the http server.
http.createServer(function (request, response) {
// Attach listener on end event.
request.on("end", function () {
// Read the file.
fs.readFile("test.txt", 'utf-8', function (error, data) {
// Write headers.
response.writeHead(200, {
'Content-Type': 'text/plain'
});
// Increment the number obtained from file.
data = parseInt(data) + 1;
// Write incremented number to file.
fs.writeFile('test.txt', data);
// End response with some nice message.
response.end('This page was refreshed ' + data + ' times!');
});
});
// Listen on the 8080 port.
}).listen(8080);
Node.js'in Node Package Manager (NPM-Node Paket Yöneticisi) adında bir paket yöneticisi vardır. Node.js ile kendiliğinden yüklenir.

Bunu files.js olarak kaydedin. Bu kodu çalıştırmadan önce, files.js ile aynı dizinde test.txt adlı bir dosya yaratın.

Bu kod fs.readFile() ve fs.writeFile() yöntemlerini gösterir. Sunucu her istek aldığında, kod dosyadan sayıyı okur, arttırır ve yeni sayıyı dosyaya yazar. fs.readFile() yöntemi üç argüman kabul eder: okunacak dosya adı, beklenen karakter kodu, ve geriçağrı fonksiyonu.

Dosyaya yazma, en azından bu durumda, çok daha basittir. Herhangi bir sonucu beklememiz gerekmiyor, gerçek bir uygulamada hata kontrolü yapmamız gerekse de. fs.writeFile() yöntemi dosya adı ve veriyi argüman olarak kabul eder. Ayrıca sırasıyla karakter kodu ve geriçağrı fonksiyonunu belirtmek için üçüncü ve dördüncü argümanları da kabul eder( ikisi de tercihe bağlıdır).

Şimdi, aşağıdaki komutla kodu çalıştıralım:

node files.js
Gözatıcıda ([Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]) açın ve birkaç kez yenileyin. Şimdi, iki arttırdığı görüldüğünden kodda hata olduğunu düşünebilirsiniz. Bu bir hata değildir. Bu URL'yi her istediğinizde, iki istek sunucuya gönderilir. İlk istek favicon.ico'yu isteyen gözatıcı tarafından kendiliğinden yapılır, ve tabii ki, ikincisi de URL içindir ([Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]).

Bu davranış teknik olarak bir hata değilse de, istemediğimiz bir davranıştır. Bunu istek URL'yi kontrol ederek kolayca düzeltebiliriz. İşte yenilenmiş kod:

// Include http module,
var http = require("http"),
// And mysql module you've just installed.
fs = require("fs");

// Create the http server.
http.createServer(function (request, response) {
// Attach listener on end event.
request.on('end', function () {
// Check if user requests /
if (request.url == '/') {
// Read the file.
fs.readFile('test.txt', 'utf-8', function (error, data) {
// Write headers.
response.writeHead(200, {
'Content-Type': 'text/plain'
});
// Increment the number obtained from file.
data = parseInt(data) + 1;
// Write incremented number to file.
fs.writeFile('test.txt', data);
// End response with some nice message.
response.end('This page was refreshed ' + data + ' times!');
});
} else {
// Indicate that requested file was not found.
response.writeHead(404);
// And end request without sending any data.
response.end();
}
});
// Listen on the 8080 port.
}).listen(8080);
Artık test edin, beklendiği gibi çalışacaktır.

MySQL Veritabanlarına Erişim
Çoğu sunucu-taraflı teknolojilerin bir veritabanına bağlanmak ve veritabanını sorgulamak için dahili araçları vardır. Node.js ile, bir kütüphane kurmak zorundasınız. Bu makale için, yapısı değişmeyecek ve kullanımı kolay node-mysql'i seçtim. Bu modülün tam adı mysql@2.0.0-alpha2 (@'den sonraki herşey sürüm numarası). Konsolunuzu açın, kodlarınızı sakladığınız dizine gidin, ve aşağıdaki komutu çalıştırın:

npm install mysql@2.0.0-alpha2
Bu modülü yükler ve kurar, ve ayrıca geçerli dizinde node_modules dizini yaratır. Şimdi bunu kodumuzda nasıl kullanacağımıza bakalım; aşağıdaki örneğe bakalım:

// Include http module,
var http = require('http'),
// And mysql module you've just installed.
mysql = require("mysql");

// Create the connection.
// Data is default to new mysql installation and should be changed according to your configuration.
var connection = mysql.createConnection({
user: "root",
password: "",
database: "db_name"
});

// Create the http server.
http.createServer(function (request, response) {
// Attach listener on end event.
request.on('end', function () {
// Query the database.
connection.query('SELECT * FROM your_table;', function (error, rows, fields) {
response.writeHead(200, {
'Content-Type': 'x-application/json'
});
// Send data as JSON string.
// Rows variable holds the result of the query.
response.end(JSON.stringify(rows));
});
});
// Listen on the 8080 port.
}).listen(8080);
Bu kütüphaneyle veritabanı sorgulaması kolaydır; basitçe sorgu metni ve geriçağrı fonksiyonunu girin. Gerçek bir uygulamada,hata olup olmadığını kontrol etmeniz (hata olursa error parametresi undefined olmayacaktır) ve sorgunun başarılı yada başarısızlığına bağlı olarak yanıt kodları yollamanız gerek. Content-Type'ı JSON için geçerli MIME tipi olan application/json verdiğimize de dikkat edin. rows parametresi sorgunun sonucunu içerir; ve rows içindeki veriyi JSON.stringify() yöntemini kullanarak kolayca JSON biçimine dönüştürüyoruz.

Bu dosyayı mysql.js olarak kaydedin, ve onu çalıştırın (kurulu MySQL'iniz varsa yani):

node mysql.js
Gözatıcınızda [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] adresine gidin, ve JSON-biçimli dosyayı yüklemeye yönlendirilmeniz gerekiyor.

Sonuç
Node.js'deki her fonksiyon eşzamansızdır.

Node.js fazladan iş demektir, ama hızlı ve sağlam bir uygulamanın bedeli olmaya değerdir. Şayet herşeyi en alt düzeyde yapmak istemiyorsanız, her zaman Express gibi, uygulama geliştirmeyi kolaylaştıran bir çatı seçebilirsiniz.

Node.js umut vaad eden bir teknolojidir ve çok yüklü bir uygulama için mükemmel bir seçimdir. Microsoft, eBay, ve Yahoo gibi firmalarca kanıtlanmıştır. Şayet websitenizi/uygulamanızı yayınlama konusunda emin değilseniz, her zaman ucuz bir VPS çözümü ya da Microsoft Azure ve Amazon EC2 gibi çeşitli bulut-tabanlı hizmetlerini kullanabilirsiniz. Bu hizmetlerin her ikisi de makul bir fiyata ölçeklenebilir ortamlar sunar.

Herhangi bir sorunuzda, not düşmeyi unutmayın!

__________________
TalkIRCnet IRC Network
If it is not logic, it's magic. If it is not magic, it is female logic.
 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları sohbet odaları Benimmekan Mobil Sohbet
Cevapla

Etiketler
node hakkında, node kurulumu, node.js, nodejs


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Yeni başlayanlar için zayiflama rehberi Sarya Diyet ve Sağlıklı Beslenme 0 02 Ocak 2021 05:33
Örgüye yeni başlayanlar için modeller Sevda El Sanatları 0 19 Ocak 2013 05:35
Yeni başlayanlar için Facebook. Lee Genel Paylaşım 0 31 Ekim 2007 16:36