2013-05-14 6 views
1

Sinatra을 사용하여 채팅방을 처음부터 만들려고합니다. 사용자가 페이지를 떠날 때를 감지해야합니다. 처음에는 Javascript onbeforeunload 함수를 사용하려고 생각했지만 사용자는 실제로 서버에 알리지 않고 떠나거나 떠날 수있었습니다.사용자가 이벤트 스트림을 떠날 때 감지합니다.

스트림 부분에 대한 내 코드는 다음과 같습니다 다음시나 예제 파일 중 하나에 따르면

get '/stream', :provides => 'text/event-stream' do 
    stream :keep_open do |out| 
    connections << out 
    end 
end 

, 기본적으로 채팅방을 만들어 chat.rb는, 그들이 사용하는

out.callback do 
    connections.delete(out) 
end 

하지만, 테스트로 페이지를 닫을 때 내 테스트에서이 코드는 실행되지 않았습니다. (예를 들어, 코드가 실행되고 콘솔에 출력 된 내용이없는 경우 콘솔에 무엇인가 puts이 있습니다.)

사용자가 스트림을 떠난 경우보다 안정적인 방법으로 검색 할 수 있습니까?

또한 socket.io (클라이언트 측) 또는 다른 것을 사용하지 않지만 문제가 해결되면 공개됩니다.

+0

및 sinata 버전 :

나는 아이디어를 설명하기 위해 약간에게 chat.rb 적응? –

+0

@SirScript 저는 Sinatra 1.4.2 – Piccolo

+0

http://www.sinatrarb.com/intro.html을 사용합니다 : "WEBRick과 같은 일부 서버는 스트리밍을 전혀 지원하지 않을 수도 있습니다." – utapyngo

답변

2

chat.rb 예를 기반으로, 채팅 메시지를 깨끗하게 처리하는 대신 작은 프로토콜을 만들어 데이터를 교환합니다.

이 방법을 사용하면 각 연결에 대해 "활성 신호"를 보내고 응답하지 않는 모든 신호를 제거 할 수 있습니다. https://gist.github.com/tlewin/5708745 사용 않는 서버

+0

정말 고마워! 이것은 정말 좋은 구현입니다. 이 코드를 사용할 수있는 라이센스는 무엇입니까 (직접 복사하지 않았습니까?). MIT 라이센스하에이 프로젝트를 공개 할 계획이었습니다. 괜찮습니까? 나는 당신에게 귀속을 줄 것입니다. – Piccolo

+0

MIT는 저에게 좋습니다! 필요한 것이 있으면 알려주세요! –

관련 문제