javascript - python 和 js 中的 Websocket

标签 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 中实现这一点?

最佳答案

您的服务器上肯定需要有 websocket 代码,否则您的客户端将无法与您的服务器保持连接,反之亦然。

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

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

希望这对您有所帮助!

关于javascript - python 和 js 中的 Websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31155325/

相关文章:

javascript - jQuery 悬停 mouseenter mouseleave

javascript - 如何使用 capybara 从 ruby​​ 调用异步 javascript 函数?

javascript - 如何使用 python Flask 应用程序在 d3js 图表中动态加载 json 数据

python - Itertools - 合并两个列表以获得所有可能的组合

python - selenium 与 python 网络爬虫

javascript - 如何在 Javascript 中使用 Babel 脚本的对象?

python - CherryPy 中包含 "+"的 URL 出现问题

javascript - Angular 不直接在 html 上绑定(bind)数据

javascript - 无法读取未定义的 Angular 工厂的属性

angularjs - 矩形资源的加载指示器