2012-01-25 5 views
2

메시징 시스템을 개발 중이며 사용자가 입력하는 중이거나 표시하고 싶습니다. 어떻게하면 될지 상상할 수 있습니다. 데이터베이스에 누가 타이핑 중인지, 타이핑 할 사람과 시간을 나타내는 열이있는 "타이핑"테이블이 있습니다. 매번 입력 필드에서 키를 누르면 데이터베이스에 게시됩니다 (사이트가 느려지는 것처럼 보입니다). 그런 다음 입력란의 열이 5 초보다 오래된지 확인한 다음 몇 가지 자바 스크립트를 실행하여 메시지가 표시되지 않으면 메시지를 제거한 다음 제거합니다.다른 사용자에게 "사용자가 타이핑 중 ..."을 표시하는 방법은 무엇입니까?

이것은 꽤 간단한 방법으로 보이지만, 더 좋은 옵션이 있는지 궁금합니다. 나는 데이터베이스에 대한 그런 빈번한 게시물에 불편하다. 누구든지 이것이 성취 될 수있는 더 좋은 방법을 알고 있습니까? 도움이된다면 고맙습니다.

+0

http://stackoverflow.com/questions/4428283/user-is-typing-a-message-function – j08691

+0

어떤 웹 서버 스택을 실행하고 있습니까? – josh3736

답변

4

왜 우리는 당신의 사고 방식을 약간 바꾸지 않습니까? 타이핑을 할 때 서버가 아닌 클라이언트에 부담을가집니다.

첫 번째 키 누르기 후에는 서버에 이벤트를 보내고 제한 시간을 시작하십시오. 5 초 후, 우리는 더 이상 타이핑을하지 않는다고 말할 것입니다. 다른 키 누르기가 있으면 이전 제한 시간을 지우고 새 시간 제한을 시작합니다. 이렇게하면 사용자가 지속적으로 타이핑 할 때마다 업데이트됩니다.

사용자가 페이지를 새로 고침하거나 떠날 경우 문제가 발생합니다. 그런 다음 타이핑을하지는 않지만 타임 아웃이 발생하지 않습니다. 이를 처리하기 위해 두 가지 일을하는 것이 좋습니다. 먼저 사용자가 새 페이지를 요청하면 상태를 항상 not-typing에 넣습니다. 왜? 최소한 두 번째 탭에서는 새 탭을 열어도 입력하지 않기 때문입니다. 둘째, 사용자가 브라우저를 종료하고 중지 된 타이핑 트리거 이전에 닫으면 결국에는이를 정리해야합니다. 아마도 매 시간마다 cron을 실행할 수 있으며, 5 분이 넘은 세 사람은 여전히 ​​타이핑 중이라고 말하고 타이핑하지 않도록 설정합니다.

+0

"서버에 이벤트 보내기"방법을 모르겠습니다. 한 사람을 위해 무언가를하는 방법을 알고 다른 사람이 데이터베이스를 사용하는 것을 볼 수있는 유일한 방법은 ... 조금 자세히 설명해 주시겠습니까? 또는 참조를 보내주십시오? – Ian

+0

@itdoell 정말, 내가 말하고자하는 것은 AJAX를 사용하여 서버의 페이지에 요청을 보낸 다음 해당 페이지에서 데이터베이스에 대한 쿼리를 보내는 것입니다. AJAX를 사용하는 방법을 잘 모르는 경우에는 많은 리소스가 필요하며 필요한 경우 몇 가지 사항을 알려줄 수 있습니다. – Ktash

+0

오, 나는 AJAX를 사용하는 방법을 안다. 나는 지금 당신이 의미하는 바를 더 잘 이해한다. 고맙습니다. – Ian

0

5 초마다 텍스트 입력 내용이 비어 있는지 확인하십시오. 텍스트가 있으면 사용자를 입력으로 표시하십시오.

유일한 단점은 메시지를 반자 문자로 남겨두면 사용자가 창을 닫거나 깨닫고 다시 보내거나 지울 때까지 입력으로 표시된다는 것입니다. 그러나 서버로 보내기 전에 하프 입력 메시지가 변경되었는지 여부를 감지 할 수 있습니다.

0

긴 폴링 (원한다면)이라도 너무 간단한 오버 헤드와 비슷합니다. 정말 SQL에 연결하는 백엔드 시스템에 달려 있습니다. 웹 소켓을 사용하여 이것을 고려 했습니까? 진정한 전이중 통신입니다.

0

사용자의 입력 상태를 잃어 버렸더라도 memcache 또는 redis와 같은 형식으로 입력 상태를 오프로드 할 수 있습니다. 사용자가 지난 5 초 동안 타이핑을했다면 다른 사람들에게 알려주기 위해 값을 읽는 것만으로 충분합니다.

관련 문제