Latest web development tutorials

روبي المقبس البرمجة

تقدم روبي مستويين من الوصول إلى خدمات الشبكة، يمكنك الوصول إلى نظام التشغيل الأساسي، فإنه يسمح لك لتحقيق دعم العميل والخادم لبروتوكولات مهيأ للاتصال وبدون اتصال المقبس الأساسي.

روبي موحدة بروتوكولات شبكة دعم التطبيق، مثل بروتوكول نقل الملفات، HTTP، وما شابه ذلك.

سواء أعلى أو أسفل. تقدم روبي بعض الفئات الأساسية، لذلك يمكنك استخدام TCP التفاعلي، UDP، الجوارب، والعديد من البروتوكولات الأخرى، دون شكليات في طبقة الشبكة. كما توفر هذه الفئات فصول تكميلية، حتى تتمكن من قراءتها بسهولة والكتابة إلى الملقم.

بعد ذلك، دعونا نتعلم كيف روبي المقبس البرمجة


ما هي مآخذ

عندما نقل البيانات طبقة التطبيق من خلال طبقة النقل، TCP و UDP تجربة مع توفير الخدمات للقضايا عملية تقديم الطلبات المتزامنة متعددة. اتصالات TCP متعددة أو تطبيقات متعددة من خلال نفس العملية قد تتطلب ميناء بروتوكول TCP لنقل البيانات. من أجل التمييز بين عمليات التطبيقات المختلفة، والاتصالات، والعديد من أنظمة تشغيل الكمبيوتر تتفاعل مع تطبيقات TCP / IP بروتوكول ويوفر واجهة يسمى مقبس (المقبس)، والتمييز بين شبكة الاتصالات والربط بين عمليات التطبيق مختلفة ل.

توليد مأخذ، وهناك ثلاثة معالم رئيسية هي: وجهة عنوان IP لحركة المرور، وبروتوكول طبقة النقل (TCP أو UDP) المستخدمة ورقم المنفذ. الغرض مقبس ل"مأخذ". من خلال الجمع بين هذه المعايير الثلاثة، و "مأخذ" ربط المقبس، وطبقة التطبيقات وطبقة النقل يمكن أن يكون من خلال واجهة مأخذ، والتمييز بين عمليات الاتصال من التطبيقات المختلفة أو اتصالات الشبكة، خدمات نقل البيانات المتزامنة.

تحليل مآخذ المفردات:

خيارات وصف
نطاق يستخدم عائلة البروتوكول المحدد، وعادة PF_INET، PF_UNIX، PF_X25، وهلم جرا.
نوع تحديد نوع المقبس: SOCK_STREAM أو SOCK_DGRAM، ويحدد واجهة المقبس أيضا المقبس الخام (SOCK_RAW)، يسمح البرنامج باستخدام بروتوكول على مستوى منخفض
بروتوكول تعيين عادة 0.
اسم المضيف شبكة معرف الواجهة:
  • سلسلة يمكن أن يكون اسم المضيف أو عنوان IP
  • السلسلة "<بث>"، حدد عنوان INADDR_BROADCAST.
  • سلسلة صفر طول تحدد INADDR_ANY
  • تفسير عدد صحيح كما أمر بايت مجموعة من عنوان ثنائي.
ميناء port هو رقم المنفذ، وسوف لكل خادم الاستماع إلى واحد أو عدة أرقام المنافذ لاتصالات العملاء، يمكن للرقم المنفذ يكون Fixnum رقم المنفذ، فإنه يحتوي على اسم الخادم والمنفذ.

عميل بسيط

أدناه أننا من خلال مجموعة والميناء نظرا لكتابة المثال عميل بسيط، روبي TCPSocket الفئة المفتوحة توفر وسيلة لفتح socke.

TCPSocket.open (hosname، الميناء) لفتح اتصال TCP.

بمجرد فتح اتصال المقبس، يمكنك أن تقرأ مثل كائن IO كما يتم الانتهاء منه، تحتاج إلى إغلاق ملف أقرب الاتصال.

يوضح المثال التالي كيفية الاتصال مضيف معين، وقراءة البيانات من مأخذ، وأخيرا إغلاق مأخذ:

require 'socket'      # Sockets 是标准库

hostname = 'localhost'
port = 2000

s = TCPSocket.open(hostname, port)

while line = s.gets   # 从 socket 中读取每行数据
  puts line.chop      # 打印到终端
end
s.close               # 关闭 socket 

خدمة بسيطة

ويمكن استخدام روبي الطبقة TCPServer لكتابة خدمة بسيطة. TCPServer الكائنات TCPSocket الكائن المصنع.

الآن نستخدم TCPServer.open (المضيف، المنفذ) لإنشاء كائن TCPServer.

المكالمة التالية TCPServer تقبل طريقة ينتظر حتى يتصل العميل إلى ميناء معين، وإرجاع الكائن TCPSocket واحدة تمثل اتصال العميل.

require 'socket'               # 获取socket标准库

server = TCPServer.open(2000)  # Socket 监听端口为 2000
loop {                         # 永久运行服务
  client = server.accept       # 等待客户端连接
  client.puts(Time.now.ctime)  # 发送时间到客户端
  client.puts "Closing the connection. Bye!"
  client.close                 # 关闭客户端连接
}

الآن، تشغيل التعليمات البرمجية أعلاه على الخادم، وعرض النتائج.


خدمة TCP العميل متعددة

على شبكة الإنترنت، ومعظم الخدمات لديها عدد كبير من الاتصالات العميل.

روبي الطبقة الموضوع يمكن بسهولة إنشاء متعددة الخيوط، وهو موضوع التنفيذ لاتصالات العملاء، وموضوع الرئيسي هو في انتظار مزيد من الاتصالات.

require 'socket'                # 获取socket标准库

server = TCPServer.open(2000)   # Socket 监听端口为 2000
loop {                          # 永久运行服务
  Thread.start(server.accept) do |client|
    client.puts(Time.now.ctime) # 发送时间到客户端
	client.puts "Closing the connection. Bye!"
    client.close                # 关闭客户端连接
  end
}

في هذا المثال، ومأخذ تشغيل إلى الأبد، وعندما server.accept تلقي العميل للاتصال، يتم إنشاء موضوع جديد والبدء فورا في معالجة الطلب. والآن ظهر حلقة البرنامج الرئيسية وانتظر اتصال جديد.


مستعرض ويب صغيرة

يمكننا استخدام مكتبة مقبس لتنفيذ أي بروتوكول الإنترنت. يظهر التعليمة البرمجية التالية كيفية الحصول على محتوى الصفحة:

require 'socket'
 
host = 'www.w3cschool.cc'     # web服务器
port = 80                           # 默认 HTTP 端口
path = "/index.htm"                 # 想要获取的文件地址

# 这是个 HTTP 请求
request = "GET #{path} HTTP/1.0\r\n\r\n"

socket = TCPSocket.open(host,port)  # 连接服务器
socket.print(request)               # 发送请求
response = socket.read              # 读取完整的响应
# Split response at first blank line into headers and body
headers,body = response.split("\r\n\r\n", 2) 
print body                          # 输出结果

لتحقيق العميل على شبكة الإنترنت مماثل، يمكنك استخدام مكتبة بنيت قبل من HTTP مثل نت :: HTTP.

التعليمة البرمجية التالية ما يعادل رمز السابق:

require 'net/http'                  # 我们需要的库
host = 'www.w3cschool.cc'           #  web 服务器
path = '/index.htm'                 # 我们想要的文件 

http = Net::HTTP.new(host)          # 创建连接
headers, body = http.get(path)      # 请求文件
if headers.code == "200"            # 检测状态码
  print body                        
else                                
  puts "#{headers.code} #{headers.message}" 
end

سبق يمكننا ببساطة إدخال روبي في التطبيقات مأخذ، للمزيد من المعلومات، يرجى الاطلاع على: المكتبات روبي وأساليب الفئة المقبس