Asenkron Ağ Programlama Temelleri! (EventMachine)

Bunjo

Uzman üye
14 Ara 2020
1,592
1,889
I Won
oqk18ir.png


lbn20fm.png



pDHFoUY.png


Merhabalar ben saldırı timlerinden Bunjo, bu konuda Asenkron Programlama'nın ne olduğunu anlatacağım.



Asenkron Programlama

Asenkron programlama, bir bilgisayar programının işlemlerinin belirli bir sıraya bağlı olmadan eşzamansız bir şekilde gerçekleştirildiği bir programlama paradigmadır. Bu, bir işlem başlamadan önce diğer işlemlerin tamamlanmasını beklemek zorunda olmadığı anlamına gelir. Asenkron programlama genellikle I/O yoğun uygulamalarda ve kullanıcı arayüzü etkileşimlerinde yaygın olarak kullanılır.

Geleneksel olarak, programlar adım adım, sıra ile çalışırlar. Bir adım tamamlanmadan bir sonraki adıma geçilemez. Ancak asenkron programlama, işlemlerin birbirinden bağımsız olarak çalıştığı ve bir işlemin tamamlanmasını beklerken diğer işlemlerin devam edebildiği bir model sunar. Bu, özellikle zaman alıcı işlemlerle başa çıkmak, performansı artırmak ve daha etkili bir şekilde kaynakları kullanmak için önemlidir.

Asenkron programlama genellikle olay tabanlı programlamayla birleştirilir. Bu, bir olayın gerçekleştiğinde belirli bir işlemin tetiklenmesini sağlar. Asenkron yapılar genellikle callback fonksiyonları veya promise/async-await gibi mekanizmaları içerir.

r39b5y9.png


EventMachine Nedir?

EventMachine, Ruby dilinde geliştirilen bir asenkron I/O ve ağ kütüphanesidir. Bu kütüphane, özellikle ağ programlaması ve asenkron işlemlerle uğraşan geliştiriciler için tasarlanmıştır.
EventMachine, Ruby programları arasında olay tabanlı (event-driven) programlamaya olanak tanıyan bir çerçeve sağlar.


Rich (BB code):
gem install eventmachine em-websocket

Komutu ile kütüphane kurulumunu yapabilirsiniz.

TCP Sunucusu:


Ruby:
require 'eventmachine'

module TCPServerExample
  def post_init
    puts "Yeni bir bağlantı geldi!"
  end

  def receive_data(data)
    puts "Alınan veri: #{data}"
    send_data "Merhaba, #{data}"
  end

  def unbind
    puts "Bağlantı kapatıldı!"
  end
end

EventMachine.run do
  EventMachine.start_server '0.0.0.0', 1234, TCPServerExample
  puts "TCP Sunucusu başlatıldı, 1234 portunu dinliyor."
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

module TCPServerExample: TCPServerExample adında bir modül tanımlar. Bu modül, EventMachine'in start_server fonksiyonu tarafından çağrılacak ve TCP sunucusu olaylarına yanıt verecek olan metodları içerir.

def post_init: Yeni bir bağlantı kurulduğunda çağrılan bir metoddur. Bu metod, bağlantı kurulduğunda ekrana bir mesaj yazdırır.

def receive_data(data): Veri alındığında çağrılan bir metoddur. Alınan veriyi ekrana yazdırır ve aynı veriyi geri gönderir.

def unbind: Bağlantı kapatıldığında çağrılan bir metoddur. Bağlantı kapatıldığında ekrana bir mesaj yazdırır.

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine.start_server '0.0.0.0', 1234, TCPServerExample: EventMachine'in start_server fonksiyonu kullanılarak bir TCP sunucusu başlatılır. Sunucu, '0.0.0.0' adresini ve 1234 portunu dinler. Olayları işlemek için TCPServerExample modülü kullanılır.

puts "TCP Sunucusu başlatıldı, 1234 portunu dinliyor.": Sunucunun başlatıldığına dair bir mesajı ekrana yazdırır.

TCP Clienti:


Ruby:
require 'eventmachine'

module TCPClientExample
  def post_init
    send_data "Merhaba, TCP Sunucusu!"
  end

  def receive_data(data)
    puts "Alınan cevap: #{data}"
    close_connection
  end
end

EventMachine.run do
  EventMachine.connect '127.0.0.1', 1234, TCPClientExample
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

module TCPClientExample: TCPClientExample adında bir modül tanımlar. Bu modül, EventMachine'in connect fonksiyonu tarafından çağrılacak ve TCP istemci olaylarına yanıt verecek olan metodları içerir.

def post_init: Bağlantı kurulduğunda çağrılan bir metoddur. Bu metod, bağlantı kurulduktan hemen sonra sunucuya "Merhaba, TCP Sunucusu!" mesajını gönderir.

def receive_data(data): Veri alındığında çağrılan bir metoddur. Alınan cevabı ekrana yazdırır ve bağlantıyı kapatır (close_connection).

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine.connect '127.0.0.1', 1234, TCPClientExample: EventMachine'in connect fonksiyonu kullanılarak bir TCP istemcisi başlatılır. İstemci, '127.0.0.1' IP adresini ve 1234 portunu kullanarak belirtilen sunucuya bağlanır. Olayları işlemek için TCPClientExample modülü kullanılır.

Kullanım:

fe25ju7.png


qh1hzod.png


UDP Sunucusu:

Ruby:
require 'eventmachine'

module UDPServerExample
  def post_init
    puts "UDP sunucusu başlatıldı, 12345 portunu dinliyor."
  end

  def receive_data(data, sender_info)
    puts "Alınan UDP verisi: #{data} - Gönderen: #{sender_info[2]}, Port: #{sender_info[1]}"
    send_data "Merhaba, #{data}", sender_info[2], sender_info[1]
  end
end

EventMachine.run do
  EventMachine.open_datagram_socket '0.0.0.0', 12345, UDPServerExample
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

module UDPServerExample: UDPServerExample adında bir modül tanımlar. Bu modül, EventMachine'in open_datagram_socket fonksiyonu tarafından çağrılacak ve UDP sunucusu olaylarına yanıt verecek olan metodları içerir.

def post_init: UDP sunucusu başlatıldığında çağrılan bir metoddur. Bu metod, sunucunun başlatıldığına dair bir mesajı ekrana yazdırır.

def receive_data(data, sender_info): Veri alındığında çağrılan bir metoddur. Alınan UDP verisini ve gönderenin bilgilerini ekrana yazdırır. Ardından, göndereni bulunduğu adres ve port üzerinden "Merhaba, #{data}" mesajı ile yanıt verir.

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine.open_datagram_socket '0.0.0.0', 12345, UDPServerExample: EventMachine'in open_datagram_socket fonksiyonu kullanılarak bir UDP sunucusu başlatılır. Sunucu, '0.0.0.0' adresini ve 12345 portunu dinler. Olayları işlemek için UDPServerExample modülü kullanılır.

UDP Client:

Ruby:
require 'eventmachine'

module UDPClientExample
  def post_init
    send_datagram "Merhaba, UDP Sunucusu!", '127.0.0.1', 12345
  end

  def receive_data(data)
    puts "Alınan cevap: #{data}"
    EventMachine.stop
  end
end

EventMachine.run do
  EventMachine.open_datagram_socket '0.0.0.0', nil, UDPClientExample
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

module UDPClientExample: UDPClientExample adında bir modül tanımlar. Bu modül, EventMachine'in open_datagram_socket fonksiyonu tarafından çağrılacak ve UDP istemci olaylarına yanıt verecek olan metodları içerir.

def post_init: İstemci başlatıldığında çağrılan bir metoddur. Bu metod, istemcinin başlatıldığına dair bir mesajı sunucuya gönderir.

def receive_data(data): Veri alındığında çağrılan bir metoddur. Alınan cevabı ekrana yazdırır ve EventMachine'i durdurur (EventMachine.stop).

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine.open_datagram_socket '0.0.0.0', nil, UDPClientExample: EventMachine'in open_datagram_socket fonksiyonu kullanılarak bir UDP istemcisi başlatılır. İstemci, '0.0.0.0' adresini ve herhangi bir portu kullanarak dinler. Olayları işlemek için UDPClientExample modülü kullanılır.

Zamanlanmış Görev Örneği:

Ruby:
require 'eventmachine'

module TimerExample
  def post_init
    puts "Zamanlanmış görev başlatıldı!"
    EventMachine.add_periodic_timer(5) { send_data "Zamanlanmış görev çalıştı!\n" }
  end
end

EventMachine.run do
  EventMachine.connect '127.0.0.1', 1234, TimerExample
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

module TimerExample: TimerExample adında bir modül tanımlar. Bu modül,
EventMachine'in connect fonksiyonu tarafından çağrılacak ve zamanlanmış görevi gerçekleştirecek olan metodları içerir.

def post_init: Bağlantı kurulduğunda çağrılan bir metoddur. Bu metod, bağlantı kurulduğunda ekrana bir başlangıç mesajı yazdırır ve add_periodic_timer fonksiyonunu kullanarak bir zamanlanmış görev ekler. Bu görev, her 5 saniyede bir belirtilen kod bloğunu çlıştırarak sunucuya "Zamanlanmış görev çalıştı!" mesajını gönderir.

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine.connect '127.0.0.1', 1234, TimerExample: EventMachine'in connect fonksiyonu kullanılarak bir istemci başlatılır. İstemci, '127.0.0.1' IP adresini ve 1234 portunu kullanarak belirtilen sunucuya bağlanır. Olayları işlemek için TimerExample modülü kullanılır.

Web Soket (WebSocket) Sunucusu:

gem install em-websocket


Ruby:
require 'eventmachine'
require 'em-websocket'

module WebSocketServer
  def post_init
    puts "WebSocket Sunucusu başlatıldı!"
  end

  def on_message(msg)
    puts "Alınan WebSocket mesajı: #{msg}"
    send(msg)
  end
end

EventMachine.run do
  EventMachine::WebSocket.start(host: '0.0.0.0', port: 8080) do |ws|
    ws.onopen { puts "WebSocket bağlantısı açıldı!" }
    ws.onmessage { |msg| ws.on_message(msg) }
    ws.onclose { puts "WebSocket bağlantısı kapatıldı!" }
  end
  puts "WebSocket Sunucusu başlatıldı, 8080 portunu dinliyor."
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

require 'em-websocket': em-websocket kütüphanesini projeye dahil eder. Bu kütüphane, WebSocket protokolü üzerinden iletişim kurmayı sağlar.

module WebSocketServer: WebSocketServer adında bir modül tanımlar. Bu modül, EventMachine'in WebSocket kütüphanesi tarafından kullanılacak ve WebSocket olaylarına yanıt verecek olan metodları içerir.

def post_init: WebSocket sunucusu başlatıldığında çağrılan bir metoddur. Bu metod, sunucunun başlatıldığına dair bir mesajı ekrana yazdırır.

def on_message(msg): WebSocket üzerinden bir mesaj alındığında çağrılan bir metoddur. Bu metod, alınan mesajı ekrana yazdırır ve aynı mesajı gönderir (send(msg)).

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine::WebSocket.start(host: '0.0.0.0', port: 8080) do |ws|: EventMachine'in WebSocket sunucu özelliğini başlatır. Sunucu, '0.0.0.0' adresini ve 8080 portunu dinler. Her yeni bağlantı için bir WebSocket nesnesi oluşturulur ve verilen blok içindeki olayları işler.

ws.onopen { puts "WebSocket bağlantısı açıldı!" }: Bir WebSocket bağlantısı açıldığında çağrılan bir olaydır. Bu olay, bağlantının açıldığına dair bir mesajı ekrana yazdırır.

ws.onmessage { |msg| ws.on_message(msg) }: Bir WebSocket mesajı alındığında çağrılan bir olaydır. Bu olay, alınan mesajı on_message metoduna ileterek işlemi başlatır.

ws.onclose { puts "WebSocket bağlantısı kapatıldı!" }: Bir WebSocket bağlantısı kapatıldığında çağrılan bir olaydır. Bu olay, bağlantının kapatıldığına dair bir mesajı ekrana yazdırır.

puts "WebSocket Sunucusu başlatıldı, 8080 portunu dinliyor.": Sunucunun başlatıldığına dair bir mesajı ekrana yazdırır.

HTTP Sunucusu:

gem install em-http-server

Ruby:
require 'eventmachine'
require 'em-http-server'

class HTTPServer < EM::HttpServer::Server
  def process_http_request
    response = EM::DelegatedHttpResponse.new(self)
    response.status = 200
    response.content_type 'text/html'
    response.content = 'Merhaba, HTTP Sunucusu!'
    response.send_response
  end
end

EventMachine.run do
  EventMachine.start_server '0.0.0.0', 8081, HTTPServer
  puts "HTTP Sunucusu başlatıldı, 8081 portunu dinliyor."
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

require 'em-http-server': em-http-server kütüphanesini projeye dahil eder. Bu kütüphane, EventMachine ile entegre bir HTTP sunucu sağlar.

class HTTPServer < EM::HttpServer::Server: HTTPServer adında bir sınıf tanımlar ve bu sınıf, EM::HttpServer::Server sınıfından türetilir. Bu sınıf, HTTP sunucusunu temsil eder ve isteklere yanıt vermek için gerekli metodları içerir.

def process_http_request: HTTP isteği işleyen bir metodur. Bu metod, bir EM:: DelegatedHttpResponse nesnesi oluşturarak isteğe yanıt verir. Yanıt durumu (status) 200 olarak ayarlanır, içerik tipi 'text/html' olarak ayarlanır ve içerik olarak 'Merhaba, HTTP Sunucusu!' metni atanır. Ardından yanıt gönderilir (response.send_response).

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine.start_server '0.0.0.0', 8081, HTTPServer: EventMachine'in start_server fonksiyonu kullanılarak bir HTTP sunucusu başlatılır. Sunucu, '0.0.0.0' adresini ve 8081 portunu dinler. Olayları işlemek için HTTPServer sınıfı kullanılır.

puts "HTTP Sunucusu başlatıldı, 8081 portunu dinliyor.": Sunucunun başlatıldığına dair bir mesajı ekrana yazdırır.

Github

Emeğe karşılık konuyu beğenip mesaj atabilirsiniz.

Okuyan herkese teşekkür ederim.

İyi forumlar.

 

`Pala

Katılımcı Üye
2 Mar 2024
261
90
LocalHost
oqk18ir.png


lbn20fm.png



pDHFoUY.png


Merhabalar ben saldırı timlerinden Bunjo, bu konuda Asenkron Programlama'nın ne olduğunu anlatacağım.



Asenkron Programlama

Asenkron programlama, bir bilgisayar programının işlemlerinin belirli bir sıraya bağlı olmadan eşzamansız bir şekilde gerçekleştirildiği bir programlama paradigmadır. Bu, bir işlem başlamadan önce diğer işlemlerin tamamlanmasını beklemek zorunda olmadığı anlamına gelir. Asenkron programlama genellikle I/O yoğun uygulamalarda ve kullanıcı arayüzü etkileşimlerinde yaygın olarak kullanılır.

Geleneksel olarak, programlar adım adım, sıra ile çalışırlar. Bir adım tamamlanmadan bir sonraki adıma geçilemez. Ancak asenkron programlama, işlemlerin birbirinden bağımsız olarak çalıştığı ve bir işlemin tamamlanmasını beklerken diğer işlemlerin devam edebildiği bir model sunar. Bu, özellikle zaman alıcı işlemlerle başa çıkmak, performansı artırmak ve daha etkili bir şekilde kaynakları kullanmak için önemlidir.

Asenkron programlama genellikle olay tabanlı programlamayla birleştirilir. Bu, bir olayın gerçekleştiğinde belirli bir işlemin tetiklenmesini sağlar. Asenkron yapılar genellikle callback fonksiyonları veya promise/async-await gibi mekanizmaları içerir.

r39b5y9.png


EventMachine Nedir?

EventMachine, Ruby dilinde geliştirilen bir asenkron I/O ve ağ kütüphanesidir. Bu kütüphane, özellikle ağ programlaması ve asenkron işlemlerle uğraşan geliştiriciler için tasarlanmıştır.
EventMachine, Ruby programları arasında olay tabanlı (event-driven) programlamaya olanak tanıyan bir çerçeve sağlar.


Rich (BB code):
gem install eventmachine em-websocket

Komutu ile kütüphane kurulumunu yapabilirsiniz.

TCP Sunucusu:


Ruby:
require 'eventmachine'

module TCPServerExample
  def post_init
    puts "Yeni bir bağlantı geldi!"
  end

  def receive_data(data)
    puts "Alınan veri: #{data}"
    send_data "Merhaba, #{data}"
  end

  def unbind
    puts "Bağlantı kapatıldı!"
  end
end

EventMachine.run do
  EventMachine.start_server '0.0.0.0', 1234, TCPServerExample
  puts "TCP Sunucusu başlatıldı, 1234 portunu dinliyor."
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

module TCPServerExample: TCPServerExample adında bir modül tanımlar. Bu modül, EventMachine'in start_server fonksiyonu tarafından çağrılacak ve TCP sunucusu olaylarına yanıt verecek olan metodları içerir.

def post_init: Yeni bir bağlantı kurulduğunda çağrılan bir metoddur. Bu metod, bağlantı kurulduğunda ekrana bir mesaj yazdırır.

def receive_data(data): Veri alındığında çağrılan bir metoddur. Alınan veriyi ekrana yazdırır ve aynı veriyi geri gönderir.

def unbind: Bağlantı kapatıldığında çağrılan bir metoddur. Bağlantı kapatıldığında ekrana bir mesaj yazdırır.

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine.start_server '0.0.0.0', 1234, TCPServerExample: EventMachine'in start_server fonksiyonu kullanılarak bir TCP sunucusu başlatılır. Sunucu, '0.0.0.0' adresini ve 1234 portunu dinler. Olayları işlemek için TCPServerExample modülü kullanılır.

puts "TCP Sunucusu başlatıldı, 1234 portunu dinliyor.": Sunucunun başlatıldığına dair bir mesajı ekrana yazdırır.

TCP Clienti:


Ruby:
require 'eventmachine'

module TCPClientExample
  def post_init
    send_data "Merhaba, TCP Sunucusu!"
  end

  def receive_data(data)
    puts "Alınan cevap: #{data}"
    close_connection
  end
end

EventMachine.run do
  EventMachine.connect '127.0.0.1', 1234, TCPClientExample
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

module TCPClientExample: TCPClientExample adında bir modül tanımlar. Bu modül, EventMachine'in connect fonksiyonu tarafından çağrılacak ve TCP istemci olaylarına yanıt verecek olan metodları içerir.

def post_init: Bağlantı kurulduğunda çağrılan bir metoddur. Bu metod, bağlantı kurulduktan hemen sonra sunucuya "Merhaba, TCP Sunucusu!" mesajını gönderir.

def receive_data(data): Veri alındığında çağrılan bir metoddur. Alınan cevabı ekrana yazdırır ve bağlantıyı kapatır (close_connection).

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine.connect '127.0.0.1', 1234, TCPClientExample: EventMachine'in connect fonksiyonu kullanılarak bir TCP istemcisi başlatılır. İstemci, '127.0.0.1' IP adresini ve 1234 portunu kullanarak belirtilen sunucuya bağlanır. Olayları işlemek için TCPClientExample modülü kullanılır.

Kullanım:

fe25ju7.png


qh1hzod.png


UDP Sunucusu:

Ruby:
require 'eventmachine'

module UDPServerExample
  def post_init
    puts "UDP sunucusu başlatıldı, 12345 portunu dinliyor."
  end

  def receive_data(data, sender_info)
    puts "Alınan UDP verisi: #{data} - Gönderen: #{sender_info[2]}, Port: #{sender_info[1]}"
    send_data "Merhaba, #{data}", sender_info[2], sender_info[1]
  end
end

EventMachine.run do
  EventMachine.open_datagram_socket '0.0.0.0', 12345, UDPServerExample
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

module UDPServerExample: UDPServerExample adında bir modül tanımlar. Bu modül, EventMachine'in open_datagram_socket fonksiyonu tarafından çağrılacak ve UDP sunucusu olaylarına yanıt verecek olan metodları içerir.

def post_init: UDP sunucusu başlatıldığında çağrılan bir metoddur. Bu metod, sunucunun başlatıldığına dair bir mesajı ekrana yazdırır.

def receive_data(data, sender_info): Veri alındığında çağrılan bir metoddur. Alınan UDP verisini ve gönderenin bilgilerini ekrana yazdırır. Ardından, göndereni bulunduğu adres ve port üzerinden "Merhaba, #{data}" mesajı ile yanıt verir.

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine.open_datagram_socket '0.0.0.0', 12345, UDPServerExample: EventMachine'in open_datagram_socket fonksiyonu kullanılarak bir UDP sunucusu başlatılır. Sunucu, '0.0.0.0' adresini ve 12345 portunu dinler. Olayları işlemek için UDPServerExample modülü kullanılır.

UDP Client:

Ruby:
require 'eventmachine'

module UDPClientExample
  def post_init
    send_datagram "Merhaba, UDP Sunucusu!", '127.0.0.1', 12345
  end

  def receive_data(data)
    puts "Alınan cevap: #{data}"
    EventMachine.stop
  end
end

EventMachine.run do
  EventMachine.open_datagram_socket '0.0.0.0', nil, UDPClientExample
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

module UDPClientExample: UDPClientExample adında bir modül tanımlar. Bu modül, EventMachine'in open_datagram_socket fonksiyonu tarafından çağrılacak ve UDP istemci olaylarına yanıt verecek olan metodları içerir.

def post_init: İstemci başlatıldığında çağrılan bir metoddur. Bu metod, istemcinin başlatıldığına dair bir mesajı sunucuya gönderir.

def receive_data(data): Veri alındığında çağrılan bir metoddur. Alınan cevabı ekrana yazdırır ve EventMachine'i durdurur (EventMachine.stop).

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine.open_datagram_socket '0.0.0.0', nil, UDPClientExample: EventMachine'in open_datagram_socket fonksiyonu kullanılarak bir UDP istemcisi başlatılır. İstemci, '0.0.0.0' adresini ve herhangi bir portu kullanarak dinler. Olayları işlemek için UDPClientExample modülü kullanılır.

Zamanlanmış Görev Örneği:

Ruby:
require 'eventmachine'

module TimerExample
  def post_init
    puts "Zamanlanmış görev başlatıldı!"
    EventMachine.add_periodic_timer(5) { send_data "Zamanlanmış görev çalıştı!\n" }
  end
end

EventMachine.run do
  EventMachine.connect '127.0.0.1', 1234, TimerExample
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

module TimerExample: TimerExample adında bir modül tanımlar. Bu modül,
EventMachine'in connect fonksiyonu tarafından çağrılacak ve zamanlanmış görevi gerçekleştirecek olan metodları içerir.

def post_init: Bağlantı kurulduğunda çağrılan bir metoddur. Bu metod, bağlantı kurulduğunda ekrana bir başlangıç mesajı yazdırır ve add_periodic_timer fonksiyonunu kullanarak bir zamanlanmış görev ekler. Bu görev, her 5 saniyede bir belirtilen kod bloğunu çlıştırarak sunucuya "Zamanlanmış görev çalıştı!" mesajını gönderir.

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine.connect '127.0.0.1', 1234, TimerExample: EventMachine'in connect fonksiyonu kullanılarak bir istemci başlatılır. İstemci, '127.0.0.1' IP adresini ve 1234 portunu kullanarak belirtilen sunucuya bağlanır. Olayları işlemek için TimerExample modülü kullanılır.

Web Soket (WebSocket) Sunucusu:

gem install em-websocket


Ruby:
require 'eventmachine'
require 'em-websocket'

module WebSocketServer
  def post_init
    puts "WebSocket Sunucusu başlatıldı!"
  end

  def on_message(msg)
    puts "Alınan WebSocket mesajı: #{msg}"
    send(msg)
  end
end

EventMachine.run do
  EventMachine::WebSocket.start(host: '0.0.0.0', port: 8080) do |ws|
    ws.onopen { puts "WebSocket bağlantısı açıldı!" }
    ws.onmessage { |msg| ws.on_message(msg) }
    ws.onclose { puts "WebSocket bağlantısı kapatıldı!" }
  end
  puts "WebSocket Sunucusu başlatıldı, 8080 portunu dinliyor."
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

require 'em-websocket': em-websocket kütüphanesini projeye dahil eder. Bu kütüphane, WebSocket protokolü üzerinden iletişim kurmayı sağlar.

module WebSocketServer: WebSocketServer adında bir modül tanımlar. Bu modül, EventMachine'in WebSocket kütüphanesi tarafından kullanılacak ve WebSocket olaylarına yanıt verecek olan metodları içerir.

def post_init: WebSocket sunucusu başlatıldığında çağrılan bir metoddur. Bu metod, sunucunun başlatıldığına dair bir mesajı ekrana yazdırır.

def on_message(msg): WebSocket üzerinden bir mesaj alındığında çağrılan bir metoddur. Bu metod, alınan mesajı ekrana yazdırır ve aynı mesajı gönderir (send(msg)).

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine::WebSocket.start(host: '0.0.0.0', port: 8080) do |ws|: EventMachine'in WebSocket sunucu özelliğini başlatır. Sunucu, '0.0.0.0' adresini ve 8080 portunu dinler. Her yeni bağlantı için bir WebSocket nesnesi oluşturulur ve verilen blok içindeki olayları işler.

ws.onopen { puts "WebSocket bağlantısı açıldı!" }: Bir WebSocket bağlantısı açıldığında çağrılan bir olaydır. Bu olay, bağlantının açıldığına dair bir mesajı ekrana yazdırır.

ws.onmessage { |msg| ws.on_message(msg) }: Bir WebSocket mesajı alındığında çağrılan bir olaydır. Bu olay, alınan mesajı on_message metoduna ileterek işlemi başlatır.

ws.onclose { puts "WebSocket bağlantısı kapatıldı!" }: Bir WebSocket bağlantısı kapatıldığında çağrılan bir olaydır. Bu olay, bağlantının kapatıldığına dair bir mesajı ekrana yazdırır.

puts "WebSocket Sunucusu başlatıldı, 8080 portunu dinliyor.": Sunucunun başlatıldığına dair bir mesajı ekrana yazdırır.

HTTP Sunucusu:

gem install em-http-server

Ruby:
require 'eventmachine'
require 'em-http-server'

class HTTPServer < EM::HttpServer::Server
  def process_http_request
    response = EM::DelegatedHttpResponse.new(self)
    response.status = 200
    response.content_type 'text/html'
    response.content = 'Merhaba, HTTP Sunucusu!'
    response.send_response
  end
end

EventMachine.run do
  EventMachine.start_server '0.0.0.0', 8081, HTTPServer
  puts "HTTP Sunucusu başlatıldı, 8081 portunu dinliyor."
end

require 'eventmachine': EventMachine kütüphanesini projeye dahil eder.

require 'em-http-server': em-http-server kütüphanesini projeye dahil eder. Bu kütüphane, EventMachine ile entegre bir HTTP sunucu sağlar.

class HTTPServer < EM::HttpServer::Server: HTTPServer adında bir sınıf tanımlar ve bu sınıf, EM::HttpServer::Server sınıfından türetilir. Bu sınıf, HTTP sunucusunu temsil eder ve isteklere yanıt vermek için gerekli metodları içerir.

def process_http_request: HTTP isteği işleyen bir metodur. Bu metod, bir EM:: DelegatedHttpResponse nesnesi oluşturarak isteğe yanıt verir. Yanıt durumu (status) 200 olarak ayarlanır, içerik tipi 'text/html' olarak ayarlanır ve içerik olarak 'Merhaba, HTTP Sunucusu!' metni atanır. Ardından yanıt gönderilir (response.send_response).

EventMachine.run do: EventMachine'i başlatan bir blok başlatır.

EventMachine.start_server '0.0.0.0', 8081, HTTPServer: EventMachine'in start_server fonksiyonu kullanılarak bir HTTP sunucusu başlatılır. Sunucu, '0.0.0.0' adresini ve 8081 portunu dinler. Olayları işlemek için HTTPServer sınıfı kullanılır.

puts "HTTP Sunucusu başlatıldı, 8081 portunu dinliyor.": Sunucunun başlatıldığına dair bir mesajı ekrana yazdırır.

Github

Emeğe karşılık konuyu beğenip mesaj atabilirsiniz.

Okuyan herkese teşekkür ederim.

İyi forumlar.

Bilgilendirici olmuş elinize sağlık :)
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.