Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

루비 네트워크 프로그래밍

Ruby에서 사용자 정의 네트워크 클라이언트 및 서버를 만들고 싶습니까? 아니면 어떻게 작동하는지 이해하시겠습니까?

그런 다음 소켓을 처리해야 합니다.

루비 네트워크 프로그래밍 둘러보기에 참여하세요. 기본 사항을 배우고 Ruby를 사용하여 다른 서버 및 클라이언트와 대화를 시작하세요!

소켓이란 무엇입니까? ?

소켓은 통신 채널의 끝점이며 클라이언트와 서버 모두 소켓을 사용하여 통신합니다.

작동 방식은 매우 간단합니다. :

연결이 설정되면 데이터를 소켓에 넣을 수 있으며 다른 쪽 끝으로 이동하여 수신기가 소켓에서 읽어 들어오는 데이터를 처리합니다.

소켓 유형

사용할 수 있는 소켓에는 몇 가지 유형이 있으며 가장 일반적인 소켓인 TCP 소켓을 사용하면 HTTP 또는 FTP와 같은 TCP 기반 서비스에 연결할 수 있습니다.

UDP 기반 프로토콜을 사용해야 하는 경우 UDP 소켓을 사용할 수 있습니다.

다른 유형의 소켓은 좀 더 난해합니다. Unix 소켓은 전체 TCP 연결의 오버헤드 없이 Unix 시스템에서 IPC(프로세스 간 통신)를 허용합니다.

Ruby에서 소켓 사용

소켓이 우리를 위해 무엇을 할 수 있는지 알았으니 이제 소켓을 사용할 때입니다.

먼저 프로그램에 소켓 라이브러리가 필요합니다.

'소켓' 필요

TCP 소켓을 만들려면 TCPSocket을 사용할 수 있습니다. 클래스, 매개변수로 대상 IP 주소와 포트가 필요합니다.

이것은 연결을 설정하려고 시도합니다. 설정할 수 없으면 Errno::ECONNREFUSED가 표시됩니다. 오류.

소켓 =TCPSocket.new('google.com', 80)

이제 소켓을 통해 메시지를 보낼 수 있어야 합니다. 상대방이 사용자를 이해할 수 있으려면 통신 중인 프로토콜을 따라야 합니다.

socket.write "GET / HTTP/1.1" socket.write "\r\n\r\n"

사용하게 될 많은 메소드는 TCPSocket의 상위 클래스에서 옵니다. .

루비 네트워크 프로그래밍

서버에서 응답을 읽으려면 recv 메소드를 사용할 수 있습니다.

소켓에서 읽고자 하는 바이트 수를 매개변수로 전달해야 합니다.

socket.recv(100)를 넣습니다.

작은 문제가 있습니다. 데이터를 다시 얻지 못하고 앱이 아무 작업도 하지 않는 것처럼 보일 수 있습니다.

그 이유는 읽을 데이터가 충분하지 않으면 프로그램이 '차단'되기 때문입니다.

즉, 사용 가능한 데이터가 있거나 서버가 연결을 닫을 때까지 기다립니다. .

작업 중인 프로토콜에 따라 읽고 있는 데이터의 양을 늘리거나 줄일 수 있습니다.

차단이 문제라면 IO 클래스의 readpartial 및 read_nonblock 메소드를 확인하세요.

TCP 서버 작성 방법

서버를 구축하자! 프로세스는 클라이언트를 작성하는 것과 유사하지만 소켓에 바인딩하도록 지시해야 합니다. 인터페이스에 연결한 다음 듣기 마지막으로 수락 들어오는 연결.

TCPServer 클래스는 이미 처음 두 가지 작업을 수행합니다.

예시입니다 :

require 'socket'socket =TCPServer.new('0.0.0.0', 8080)client =socket.acceptputs "새 클라이언트! #{client}"client.write("Hello from server")client.close 

예제 서버는 포트 8080에서 수신 대기하고 메시지로 연결 클라이언트를 맞이합니다.

한 명의 고객만 수락할 수 있음을 확인하세요. 프로그램이 종료됩니다.

여러 클라이언트 수락

여러 클라이언트를 수락하고 응답하려면 루프와 일부 스레드가 필요합니다.

:

require 'socket'PORT =8081socket =TCPServer.new('0.0.0.0', PORT)def handle_connection(client) puts "New client! #{client}" client.write("Hello from server") client. closeendputs "#{PORT}에서 수신 중입니다. 취소하려면 CTRL+C를 누르십시오."loop do client =socket.accept Thread.new { handle_connection(client) }end

중지할 때까지 계속 수신 대기하는 새 서버를 시작해야 합니다.

이것을 한 단계 더 발전시키고 Ruby로 웹 서버를 작성하는 방법을 배우고 싶다면 이 블로그 게시물을 읽어보세요.

결론

TCP 소켓이 무엇인지, 어떻게 작동하는지, TCPServer와 같은 일부 Ruby 클래스를 사용하는 방법을 배웠습니다. &TCPSocket 인터넷의 다른 컴퓨터와 상호 작용할 수 있는 Ruby 응용 프로그램을 만듭니다.

루비 네트워크 프로그래밍으로 노는 것은 재미있습니다!

이제 멋진 것을 만들어 모든 사람과 공유하세요. 댓글 섹션에서 🙂

또한 Ruby 기술을 계속 향상시키려면 제 뉴스레터에 가입하는 것을 잊지 마세요!