python和js中的Websockets

时间:2015-07-01 07:40:24

标签: javascript python angularjs websocket

我目前正在创建一个网站,我对Websockets完全感到困惑。

我的数据库中有一些数据显示在我的网站上。现在每隔一段时间,数据库中就会出现新的条目,这些条目应该在网站上显示而不重新加载,现在我认为这可以通过websockets实现。

我使用web.py作为我网站的框架,我使用AngularJS。

在我的app.py中,我收到数据库条目并将其作为JSON返回。

在js中我希望收到JSON消息并将其保存在$scope中,然后使用AngularJS在网站上“打印”,我为此创建了一个客户端WebSocket:

var app = angular.module('web');

app.factory('runservice', function() {
  var service = {};
  service.connect = function() {
    if(service.ws) { return; }

    var ws = new WebSocket('wss://localhost:8080');
    ws.onopen = function() {
      service.callback("Success");
    };

    ws.onerror = function(evt) {
      service.callback("Error: " + evt.data);
    }

    ws.onmessage = function(message) {
      service.callback(message.data);
    };

    service.ws = ws;

  }
  service.subscribe = function(callback) {
    service.callback = callback;
  }
  return service;
});


app.controller('runController', function($scope, runservice) {
  runservice.connect();
  runservice.subscribe(function(message) {
    var data = JSON.parse(message);
    $scope.runs = data;
  });
});

现在,我的app.py或其他东西需要服务器端套接字吗?如果是这样,任何人都可以提供一个例子,我将如何在web.py中实现这一目标?

1 个答案:

答案 0 :(得分:2)

您肯定需要在服务器上安装websocket代码,否则您的客户端不能与您的服务器保持连接,反之亦然。

如果您希望使用实时的websockets,那么您的web.py应用程序服务器https://github.com/songdi/webpy-socketio的这个包将非常有用,对于您的角度客户端应用程序https://github.com/btford/angular-socket-io

另一种选择是简单地长时间轮询您的服务器。 AKA每隔约10秒左右向您的应用程序发出异步请求,并仅检索最新的条目。

我希望这有一些帮助!