Najlepszy samouczek Gniazdo programowania Ruby W 2024 r. W tym samouczku możesz dowiedzieć się Jakie są Gniazdka,prosty klient,prosta obsługa,Multi-Client Service TCP,Tiny przeglądarka internetowa,
Ruby oferuje dwa poziomy dostępu do usług sieciowych, można uzyskać dostęp do podstawowych system operacyjny, pozwala na uzyskanie wsparcia klienta i serwera dla protokołów połączeniowych i bezpołączeniowe gniazd podstawowe.
Ruby ujednoliconej obsługi aplikacji protokoły sieciowe, takie jak FTP, HTTP i tym podobne.
Czy górze lub na dole. Ruby udostępnia kilka podstawowych klas, dzięki czemu można korzystać z interaktywnego TCP, UDP, skarpetki, i wiele innych protokołów, bez formalności w warstwie sieciowej. Klasy te zapewniają również zajęcia dodatkowe, dzięki czemu można łatwo odczytywać i zapisywać do serwera.
Następnie, uczmy się, jak Ruby Socket Programowanie
Gdy warstwa aplikacji transmisji danych za pośrednictwem warstwy transportowej TCP i UDP doświadczeń, zapewniając jednocześnie usługi dla wielu jednoczesnych kwestii procesu aplikacji. Wiele połączeń TCP lub wielu aplikacji przez ten sam proces może wymagać port protokołu TCP do transferu danych. W celu odróżnienia różnych procesów aplikacyjnych oraz połączenia wielu systemów operacyjnych komputera interakcji z protokołem IP / TCP i aplikacji zapewnia interfejs o nazwie socket (gniazdo), rozróżnienie między komunikacji w sieci i łączności między różnymi procesami aplikacji dla.
Generowanie gniazdo, istnieją trzy główne parametry: docelowy adres IP ruchu, protokół warstwy transportowej (TCP lub UDP) używane i numer portu. Gniazdo jest przeznaczony do "gniazda". Łącząc te trzy parametry, a "gniazdo" Socket wiązania, warstwa aplikacji i warstwa transportowa może być za pomocą interfejsu gniazda, rozróżnienie pomiędzy procesami komunikacji z różnymi aplikacjami lub równoczesnych połączeń sieciowych, usług transmisji danych.
Analiza Gniazdka słownictwa:
Opcje | opis |
---|---|
domena | Określone rodzina protokołów, to zazwyczaj PF_INET, PF_UNIX, PF_X25, i tak dalej. |
typ | Określ typ gniazda: SOCK_STREAM lub SOCK_DGRAM, interfejs Socket określa również surowe gniazda (SOCK_RAW), program pozwala na korzystanie z protokołu niskopoziomowych |
protokół | Zwykle przypisuje 0. |
hosta | identyfikator interfejsu sieci:
|
port | port jest numerem portu, a każdy serwer będzie słuchać jednego lub wielu numerów portów dla połączeń klientów, numer portu może być Fixnum numer portu, to zawiera nazwę serwera i port. |
Poniżej pośrednictwem danego hosta i portu napisać prosty instancję klienta, Ruby TCPSocket klasa otwarta zapewnia sposób otworzyć Socke.
TCPSocket.open (hosname, port), aby otworzyć połączenie TCP.
Po otwarciu połączenia gniazda, można czytać jak obiekt IO jak to się zakończy, należy zamknąć plik jak najbliżej połączenia.
Poniższy przykład pokazuje, jak połączyć się z określonym hostem i odczytu danych z gniazda, a na końcu zamknąć gniazdo:
require 'socket' # Sockets 是标准库 hostname = 'localhost' port = 2000 s = TCPSocket.open(hostname, port) while line = s.gets # 从 socket 中读取每行数据 puts line.chop # 打印到终端 end s.close # 关闭 socket
Ruby może być stosowany klasę tcpserver'em napisać prostą obsługę. Tcpserver'em przedmioty są fabrycznie TCPSocket obiektu.
Teraz używamy TCPServer.open (nazwa hosta, port), aby utworzyć obiekt tcpserver'em.
Kolejna rozmowa tcpserver'em zaakceptować metodę czeka, aż klient łączy się z określonym porcie i zwraca jeden obiekt TCPSocket który reprezentuje połączenie z klientem.
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 # 关闭客户端连接 }
Teraz, powyższy kod jest uruchamiany na serwerze, wyświetlić wyniki.
W Internecie, większość usług posiada dużą ilość połączeń klienta.
Ruby klasy Thread mogą łatwo tworzyć wielowątkowym wątek wykonania dla połączeń klientów, a główny wątek czeka na więcej połączeń.
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 }
W tym przykładzie, Gniazdo wiecznie uciekać, a kiedy server.accept odbieranie klienta do łączenia się nowy wątek jest tworzony i natychmiast rozpocząć przetwarzanie żądania. A teraz główny powrót pętli programu i czekać na nowe połączenie.
Możemy korzystać z biblioteki gniazda do realizacji jakiegokolwiek protokołu internetowego. Poniższy kod pokazuje jak zdobyć zawartości strony:
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 # 输出结果
Aby osiągnąć podobny klienta sieci Web, można użyć wstępnie wbudowane biblioteki HTTP, takie jak Net :: HTTP.
Poniższy kod jest odpowiednikiem poprzedniego kodu: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
Przede po prostu przedstawić Ruby w zastosowaniach gniazdowych, dalsza dokumentacja, patrz: Biblioteki Ruby i metody klasy Socket