2012-05-24 2 views
2

나는 독특한 messageID, from, to, subject, message, timeisRead와 함께, 내 PHP/MySQL의 사이트 중 하나에 간단하고 일반적인 내부 메시징 서비스가있다.사용자가 새 메일을 받았는지 확인하는 가장 효율적인 방법은 무엇입니까?

일반적으로 사용자가 새 메일을 받았는지 확인하는 가장 좋은 방법은 무엇입니까?

누군가가 메시지를 보내면 1로 전환 된 기본 사용자 테이블에 간단한 바이너리 트리거를 저장해야하며 사용자가 모든 페이지로드에서 해당 1을 확인하도록하고 새 메일 (받은 편지함에 갈 때마다 0으로 설정)? 하지만 스팸 일 경우 사용자가 그것을 읽기 전에 삭제할 수 있습니까?

사용자가 마지막으로 읽은 메시지의 messageid을 저장하고 최신 메시지를 확인한 다음 마지막으로 읽은 메시지보다 최신인지 확인하고 경고 메시지가 표시되면 알려야합니까? 그런데 어떻게 정보를 저장해야합니까?

모든 pageload에서 새 메시지를 확인해야한다는 점을 감안할 때 더욱 효율적인 방법이 있습니까?

사용자가받은 편지함으로 이동하면 실제로 읽었는지 여부에 관계없이 사용자가받은 편지함에있는 모든 메시지에 대해 "새 메일"을 더 이상 표시하지 않아야합니다 그들 또는 아닙니다.

감사합니다.

편집 : 일부 사용자는 쿠키 또는 자바 스크립트가없는 매우 기본적인 휴대 전화에서 내 사이트에 액세스하므로 마음에 두십시오.

+0

메시지 개체에 쿼리 할 수있는 "새로 만들기"또는 "읽기"와 같은 상태에 대한 상태 필드가 없습니까? hotmail/gmail이나 좋아하는 것을 읽었을 때 읽은 메일을 읽지 않은 메일로 다시 바꿀 수 있다면, 나는 그것도 일종의 상태 필드를 사용하고 있다고 가정하고 있습니다. – Nope

+0

@Francois : 저는 OP에서'mentRead '필드를 가지고 있지만, 특정 메시지가 실제로 읽혔는지 아닌지입니다. "새 메시지"알림은 사용자가받은 편지함을 마지막으로 확인한 이후 새 메시지가있을 때 사용자에게 경고해야하기 때문에 약간 다릅니다. 말이 돼? – ProgrammerGirl

+0

websocket을 사용하는 것이 어떻습니까?서버에서 비동기 방식으로 브라우저에 메시지를 보낼 수 있다면 브라우저는 해당 정보가 필요한 모든 것을 수행 할 수 있습니다. – marcelog

답변

1

가장 좋은 방법은 html 소켓을 사용하여 stackoverflow처럼 서버에서 푸시 알림을 보내는 것입니다.

jquery plugin

그러나 모든 브라우저에서 지원되지 않는 명심, 그래서 다시 아약스 폴링 가을해야합니다.

스팸에 관해서 나는 가능하다면 스팸 검사가 끝나면 사용자에게 알리는 것이 좋습니다. 세트 비트와 함께 사용자에게 다음 저장

귀하의 솔루션은 새 메시지의 수, 업데이트 저장, 사용자 테이블에서

+0

안타깝게도 일부 사용자는 AJAX와 작동하지 않는 매우 기본적인 휴대 전화를 사용하므로 현재 사용자를 제외하고 싶지 않아이 옵션이 나에게 도움이되지는 않습니다. 또한 사용자가 여전히 "새 메일"알림을 받고받은 편지함으로 이동하지만 스팸이 삭제 된 이후에 새 메시지를 볼 수 없기 때문에 내가 언급 한 세트 비트 솔루션은 문제가 될 수 있습니다.). 그렇기 때문에 최선의 방법으로 내 머리를 감쌀 수 없으므로 ... – ProgrammerGirl

+0

스팸으로 삭제하고 표시 한 다음 사용자 테이블도 업데이트하면됩니다. –

+0

그러나 "새 메일"인 스팸인지 아니면 새로운 메일인지 아닌지 어떻게 알 수 있습니까? (이 경우에도 여전히 사용자에게 "새 메일"메시지를 표시하려고합니다) – ProgrammerGirl

0

(대신 약간의, 또한 새 메시지의 수를 저장할 수), 우측 소리 필요합니다.

AJAX 폴링은 서버 측에서 비용이 많이들 수 있습니다 (select count(*) from ...은 DB가 커질 때 값 비쌀 수 있으며이를 수행해야합니다 (예 : 분당 하나의 체크).

사용자가 웹 사이트를 탐색하고 새 메시지가없는 경우 메시지에 대한 추가 정보는 select으로 건너 뛸 수 있습니다.

+0

어떤 이벤트를 기반으로 카운트를 업데이트합니까? 모든 사용자의 pageload에서 업데이트합니까? 누군가 메시지를 보낼 때마다? 언제? – ProgrammerGirl

+0

다른 사용자가 메시지를 보낼 때 (1 회). 사용자는 분당 1 번 이상의 필드를 읽을 수 있습니다 ... –

관련 문제