2016-04-13 116 views
-1

我的代码工作正常,但我需要刷新我的页面以获取 新消息。我想要实时信息。从服务器接收实时消息(数据库 - MySQL,Frontend -Angularjs)

角控制器的功能 -

$scope.getAllMessages = function() { 
    $scope.messages=[]; 
    restservice.get('', "api/v1/message/getMessageList").then(function(response) { 
     if (response != null) { 
      for (var i = 0; i < response.length; i++) { 
       $scope.messages.push(response[i]); 
      } 
     } 
    }); 
} 

我的UI看起来像 -

<li ng-repeat="message in messages" class="{{(message.me == '1')? 'me' : 'other'}}"> 
    <div> 
     {{message.userMessage}} 
    </div> 
</li> 

请简单对我,给我一个正确的指导/教程去做。我在前端很糟糕。

+0

为什么你需要刷新整个页面?在一段时间之后调用** $ scope.getAllMessages **函数。或者,如果您需要像推送通知那样的实时消息,请与服务人员联系。服务人员的限制是在有限的浏览器上工作。 –

+0

如何间隔后调用函数?你能告诉我一个例子吗? –

+0

放置在你的控制器** setTimeout(function(){$ scope.getAllMessages()},5000)**。这里5000是毫秒。 –

回答

0

另一种方法是使用WebSockets。 Javascript已经构建了它可以使用的WebSocket对象。而且你还需要处理服务器端的websocket。但对于邮件websockets或long polling requests看起来更有用的技术,至于我。

WebSockets非常简单,如果你想要实时的话,它们可能是有用的。但是你必须在服务器上实现websockets后端。下面是使用WS从JS侧的样本:

var exampleSocket = new WebSocket("ws://www.example.com/socketserver", "protocolOne"); 
exampleSocket.send("Here's some text that the server is urgently awaiting!"); 
exampleSocket.onmessage = function (event) { 
    console.log(event.data); 
} 

这是例如从这里:https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications

0

为了避免收到的所有消息,我再次considere另做不用彷徨,也许是这样的:

$interval(getLastMessagesFrom, 1000); 


function getLastMessagesFrom() { 

    // Extract the last message_ID from $scope.messages, to do this maybe 
    // you will need to change your backend code to add the message ID in 
    // the message object. This deppends on your backend code & backend 
    // message response. 

    var last_message_id = $scope.messages[$scope.messages.length-1].id; 


    restservice.get('', "api/v1/message/getMessageList/" + last_message_id).then(function(response) { 
     if (response != null) { 

      // Now make sure that your server only returns messages with 
      // ID higher than last_message_id 

      for (var i = 0; i < response.length; i++) { 
       $scope.messages.push(response[i]); 
      } 
     } 
    }); 
} 

总而言之,如果你有一个较低的时间间隔(1000 = 1秒)和大量的并发用户,这仍然是一个坏习惯。

考虑使用套接字来避免重复和不必要的调用。

0

使用nodeJS的插座 您可以在其中实现实时体验。

如 一旦你插入到数据库中,你可以解雇JS命令发出味精实时

io.sockets.connected [setsocketid] .emit( “clssifiedMessage”,{味精:“嗨!怎么样是你吗?“));