Merhaba ben Bunjo, bu konuda "JRuby" hakkında bir anlatı yapacağım. "JRuby", Java platformunda çalışan bir Ruby uygulamasıdır. Ruby programlama dilini Java sanal makinesi (JVM) üzerinde çalıştırmak için tasarlanmıştır. Bu, Ruby kodunun Java'nın güçlü ekosisteminden faydalanmasını sağlar. JRuby, Ruby programlarını Java uygulamalarıyla entegre etmek ve Java kütüphanelerini kullanmak için bir yol sağlar.
JRuby'nin bazı özellikleri şunlardır:
Java Entegrasyonu: JRuby, Java sınıflarını Ruby koduyla kullanmaya ve aynı zamanda Ruby kodunu Java uygulamalarına entegre etmeye olanak tanır. Bu, Java ve Ruby kodlarının bir arada çalışmasını sağlar.
Performans: JRuby, Java Sanal Makinesi'nin (JVM) performans avantajlarından faydalanır. Bu, JRuby kodunun genellikle C Ruby'den (MRI - Matz's Ruby Interpreter) daha hızlı çalışmasını sağlar.
Çoklu Platform Desteği: JRuby, JVM üzerinde çalıştığı için platform bağımsızdır. Aynı JRuby kodu, farklı işletim sistemlerinde ve donanım mimarilerinde çalışabilir.
Java Kütüphaneleri: JRuby, Java diline ait kütüphaneleri kullanabilir. Bu, geniş bir Java ekosistemi ile entegrasyon sağlar.
Paralel Programlama: JRuby, Java'nın paralel programlama yeteneklerini kullanarak çoklu iş parçacıklı programlamayı destekler.
Gelin birkaç örnek yazalım.
JRuby ile "TCP/Socket Server":
JRuby ile Threading:
JRuby ile Banner Grabber:
JRuby benimde öğrenme sürecinde olduğum bir implementasyon olduğu için bu konuda anlatacaklarım bu kadardı
JRuby'nin bazı özellikleri şunlardır:
Java Entegrasyonu: JRuby, Java sınıflarını Ruby koduyla kullanmaya ve aynı zamanda Ruby kodunu Java uygulamalarına entegre etmeye olanak tanır. Bu, Java ve Ruby kodlarının bir arada çalışmasını sağlar.
Performans: JRuby, Java Sanal Makinesi'nin (JVM) performans avantajlarından faydalanır. Bu, JRuby kodunun genellikle C Ruby'den (MRI - Matz's Ruby Interpreter) daha hızlı çalışmasını sağlar.
Çoklu Platform Desteği: JRuby, JVM üzerinde çalıştığı için platform bağımsızdır. Aynı JRuby kodu, farklı işletim sistemlerinde ve donanım mimarilerinde çalışabilir.
Java Kütüphaneleri: JRuby, Java diline ait kütüphaneleri kullanabilir. Bu, geniş bir Java ekosistemi ile entegrasyon sağlar.
Paralel Programlama: JRuby, Java'nın paralel programlama yeteneklerini kullanarak çoklu iş parçacıklı programlamayı destekler.
Gelin birkaç örnek yazalım.
JRuby ile "TCP/Socket Server":
Ruby:
require 'java'
java_import 'java.net.ServerSocket'
java_import 'java.net.Socket'
java_import 'java.io.BufferedReader'
java_import 'java.io.InputStreamReader'
java_import 'java.io.PrintWriter'
class RubySocketServer
def initialize(port)
@server_socket = ServerSocket.new(port)
end
def start
puts "Server listening on port #{@server_socket.local_port}"
loop do
client_socket = @server_socket.accept
handle_client(client_socket)
end
end
def handle_client(client_socket)
puts "Client connected: #{client_socket.remote_socket_address}"
reader = BufferedReader.new(InputStreamReader.new(client_socket.input_stream))
writer = PrintWriter.new(client_socket.output_stream, true)
writer.println('Welcome to the JRuby Socket Server!')
loop do
message = reader.readline
break if message.nil? || message.empty?
puts "Received from client: #{message}"
writer.println("Server echoing: #{message}")
end
puts "Client disconnected: #{client_socket.remote_socket_address}"
client_socket.close
end
end
port = 12345
server = RubySocketServer.new(port)
server.start
JRuby ile Threading:
Ruby:
require 'java'
java_import 'java.lang.Thread'
class ParallelThread < Thread
def initialize(thread_number)
@thread_number = thread_number
super()
end
def run
10.times do |i|
puts "Thread #{@thread_number} - Count: #{i}"
sleep(rand(2))
end
end
end
threads = []
5.times do |i|
thread = ParallelThread.new(i + 1)
threads << thread
thread.start
end
threads.each(&:join)
puts "Tüm thread'ler tamamlandı."
JRuby ile Banner Grabber:
Ruby:
require 'java'
java_import 'java.net.HttpURLConnection'
java_import 'java.net.URL'
java_import 'java.io.BufferedReader'
java_import 'java.io.InputStreamReader'
class JavaWebBannerGrabber
def initialize(url)
@url = url
end
def grab_banner
url = URL.new(@url)
connection = url.openConnection
puts "URL: #{@url}"
puts "Status: #{connection.response_code} #{connection.response_message}"
puts "Server: #{connection.header_fields['Server'].first}" if connection.header_fields['Server']
puts "Date: #{connection.header_fields['Date'].first}" if connection.header_fields['Date']
puts "Content-Type: #{connection.header_fields['Content-Type'].first}" if connection.header_fields['Content-Type']
input_stream = connection.input_stream
reader = BufferedReader.new(InputStreamReader.new(input_stream))
line = reader.readLine
puts "Response Body:"
while line
puts line
line = reader.readLine
end
rescue StandardError => e
puts "Hata oluştu: #{e.message}"
ensure
input_stream.close if input_stream
end
end
url = 'http://baban.com'
banner_grabber = JavaWebBannerGrabber.new(url)
banner_grabber.grab_banner
JRuby benimde öğrenme sürecinde olduğum bir implementasyon olduğu için bu konuda anlatacaklarım bu kadardı