내 응용 프로그램 내가 웹 서비스 기능 RetrieveMessages() 초마다 호출 클라이언트 타이머가 C# 및 ASP.NETJavascript 함수가 두 번 호출되었지만이를 처리하는 방법은 무엇입니까?
에서 개발 한 LIVECHAT이다. 또한 사용자가 메시지를 보낸 직후 동일한 함수 RetrieveMessages()를 호출합니다.
마지막 메시지 ID를 저장하는 변수가 있기 때문에 모든 RetrieveMessage 호출은 읽지 않은 메시지 만 검색합니다.
는 때때로 클라이언트는과 같이, 두 번 같은 메시지를 보여에베 톤 (14시 22분 20초 일) : 안녕하세요! 에버 튼 (14:22:20) : 안녕하세요.
중복성은 클라이언트에서만 발생하며, 데이터베이스 테이블은 정상이며 중복되지 않습니다.
나는 Timer가 의심스럽고, 변수 lastMessageId가 업데이트되기 전에 Send Message가 RetrieveMessage를 실행하고 있습니다.
어떻게 RetrieveMessage() 호출을 동기화 할 수 있습니까?
다음은 분석 할 코드입니다.
// ThisFunction is a callback that RetrieveMessage every time the user send's a message
function SendMessageSucess(cdMsgEnviada) {
//Carrega Mensagens
Avalon.Services.ChatService.RetrieveMessages(CodChamado, IdLastMsg, RetrieveMessagesSucess);
}
OnTImer 틱
// Every second, verify is exist new messages
function timer_onTick() {
//Carrega Mensagens
Avalon.Services.ChatService.RetrieveMessages(CodChamado, IdLastMsg, RetrieveMessagesSucess);
}
RetrieveMessages 기능
function RetrieveMessagesSucess(result) {
var myMsgs = new Array();
for (var i = 0; i < result.length; i++) {
var obj = eval('(' + result[i] + ')');
if (obj != null)
myMsgs[i] = obj;
}
for (var j = 0; j < myMsgs.length; j++) {
if (myMsgs.length > 0) {
// Armazeno o codigo da ultima mensagem recebida
IdLastMsg = myMsgs[myMsgs.length - 1].cd_chat_message;
if (par) {
var novoconteudo = "<div style='background-color: #EFEFEF; padding: 10px;'>"
par = false;
}
else {
var novoconteudo = "<div style='padding: 10px;'>"
par = true;
}
if (myMsgs[j].origem_mensagem == 1) // Msg enviada pelo cliente
novoconteudo = novoconteudo + "<b>" + myMsgs[j].solicitante + ": </b>"
else
novoconteudo = novoconteudo + "<b>" + myMsgs[j].tecnico + ": </b>"
var objDate = eval(myMsgs[j].datahora.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));
novoconteudo = novoconteudo + "(" + objDate.format("HH:MM:ss") + ") ";
novoconteudo = novoconteudo + myMsgs[j].texto + "</div>";
divChatHistory.append(novoconteudo);
AutoScroll();
if (myMsgs[j].origem_mensagem == 2) // Msg enviada por um tecnico
show_popAlert()
}
}
// Verifico se o chat esta ativo
IsChatInativo();
}
어떤 아이디어가?
변명 내 나쁜 영어 = O). 이것은 잘 확장되지 않습니다. – cgp