2011-02-18 3 views
0

Ruby에서 채팅 클라이언트/서버 시스템을 만들고 있습니다.어떻게 루비를 사용하여 HTML 텍스트 상자에서 반환을받을 수 있습니까?

내 서버가 랩톱 또는 다른 호스트 (이 프로젝트는 클래스 프로젝트이므로 많은 처리 능력이 필요하지 않음)에서 호스팅되며 클라이언트가 웹 브라우저에서 실행될 계획입니다.

사용자가 입력 할 수있는 대화 상자와 채팅 기록을 표시하는 두 개의 텍스트 상자에 HTML을 제공합니다.

내 문제는 브라우저에 HTML 코드를 쉽게 제공하고 채팅을 표시 (IP 주소 : 포트로 이동) 할 수는 있지만 입력 내용을 어떻게 반환 할 수 있는지 알 수 없다는 것입니다. 텍스트 상자를 서버에 보냅니다.

아무도 내가 이것을 할 수있는 방법을 알고 있습니까?

답변

0

CGI 작동 원리에 대한 기본적인 지식이 필요합니다. @echoback이 권장하거나 Padrino, Rails를 사용하거나 다른 언어로 작업 할 때 Sinatra로 작업하는 것이 더 쉽다는 것을 알게되었습니다.

아주 기본적인 CGI입니다. 그것은 당신이 이야기하고있는 것을 따라 간단한 폼을 생성 한 다음, 웹 서버에 의해 Ruby로 전달 된 환경 테이블을 걷고, 키별로 정렬하고, 정렬 된 순서로 테이블을 출력합니다. 필드의 대부분은 직접 웹 서버 자체 하나에 적용하거나 CGI로, 같은 그 기능이 무엇인지 말을 서버로 전송의 헤더와 함께 브라우저가 전송 한 쿼리와 같은 :

#!/usr/bin/env ruby 

puts "Content-Type: text/html" 
puts 
puts "<html><head><style type='text/css'>body{font-family: monospace;}</style></head><body>" 

puts "<form name='foo' action='test_cgi.rb'>" 
puts "<input type='textinput' name='inputbox'></input><br />" 
puts "<textarea name='textareabox'></textarea><br />" 
puts "<input type='submit'></input>" 
puts "</form>" 

puts "<h4>ENVIRONMENT:</h4>" 
puts "<table>" 
ENV.keys.sort.each do |k| 
    puts "<tr><td>#{k}</td><td>#{ENV[k]}</td></tr>" 
end 
puts "</table>" 

puts "</body></html>" 

복사하는 것이 코드를 작성하고 test_cgi.rb이라는 루비 파일에 저장 한 다음 파일의 실행 가능 비트를 설정하십시오. 이 파일을 컴퓨터의 웹 서버에있는 cgi-bin 디렉토리로 이동하십시오. 브라우저를 사용하여 파일 (http://localhost:8080/cgi-bin/test_cgi.rb 또는 이와 비슷한 파일)에 액세스하고 양식에 다른 값을 입력하고 제출할 때 테이블 변경 결과를보십시오.

서버에서 브라우저 간 왕복 이동을 알게되면 Sinatra가 Rack을 기반으로 CGI로 모든 기능을 수행하는 것보다 더 많은 기능을 더 쉽게 제공 할 수있는 방법을 배우게됩니다.

1

나는 이것을 처리하기 위해 Sinatra과 같은 경량 프레임 워크를 사용할 것을 제안합니다. 필요한 독서없이 신속하게 일을 처리 할 수있을만큼 간단하지만 채팅 응용 프로그램을 크게 확장 할 수있을 정도로 강력합니다.

웹 기반 클라이언트를 사용하는 단점은 채팅 로그가 서버에 최신 정보를 요청한 후에 만 ​​클라이언트에서 새로 고쳐집니다. 즉, 실시간 대신에 각 페이지 새로 고침에서.

매끄러운 자바 스크립트 (대부분 XMLHTTPRequest)를 사용하여 정기적으로 새 콘텐츠를 요청할 수 있습니다 (예 : 스택 오버플로가 새로운 답변을 게시 할 때 사용자가 직접 대답을 입력하는 방법).

관련 문제