【问题标题】:To implement a web socket feature with Flask-Restful (REST Api) on the server side在服务器端使用 Flask-Restful (REST Api) 实现 Web 套接字功能
【发布时间】:2016-01-12 03:38:51
【问题描述】:

工作完成:我已经使用 Flask-Restful 实现了一个带有 Mongo DB(PyMongo 驱动程序)的 REST API,它有一个名为“Users”的端点,由 GET、POST、PUT、DELETE 组成
我的 PUT 方法:
def put(self, short_name ): coll = db.users user_info = request.get_json() print user_info #for debugging coll.update({'short_name': short_name'}, {"$set": user _info}) return Response(json_util.dumps(user _info), mimetype='application/json')

上述 PUT 方法接受一个短名称,更新用户数据库并返回一个响应。

要完成的工作:我需要实现一个服务器端 Web 套接字功能,在执行 coll.update({'short_name': short_name'}, {"$set": user _info}) 之后,必须向客户端(即完全基于 angular 构建的前端)发送一条消息发送“数据更新成功”。

我在网上看到了几个 sn-ps,但找不到一个使用 REST Api 的。现在我只需要服务器端的实现。稍后我将尝试弄清楚客户端的实现。 任何有关如何实现这一点的帮助表示赞赏。可以用简单的python完成还是需要socket.io。欢迎所有解决方案。

编辑:我修改后的服务器代码

def put(self, short_name ):
    coll = db.users
    user_info = request.get_json()
    print user_info             #for debugging
    coll.update({'short_name': short_name'}, {"$set": user _info})
    emit('my response', {'data': 'update successful'})
    return Response(json_util.dumps(user _info), mimetype='application/json')  

在客户端添加了这个:
namespace = '/';
var socket = io.connect('http://' + document.domain + ':' + location.port + namespace);

socket.on('my response', function(msg) {
            console.log(msg.data)
        });

现在当我运行我的应用程序时,客户端的控制台不会打印我从服务器发送的数据。谁能解释我哪里出错了。

【问题讨论】:

  • 嗯...与前端通信忘记 REST Api。调查套接字。你最好的朋友是Flask-SocketIO...
  • @RajaSimon 感谢您的提醒。但是您能否详细说明“与前端通信忘记 REST API”

标签: python rest flask websocket flask-restful


【解决方案1】:

这应该很有趣... Flask 或 Django 或类似的框架是为服务基于 HTTP 请求的方法而构建的。

想象一下

  1. 用户点击按钮
  2. 您的框架接受请求
  3. 满足需求
  4. 最后返回响应

这是网络服务器的实际流程。但在您的情况下,您可能希望在数据库更新或任何事件更改时更新前端。在这种情况下,您需要 Socket 与前端通信。

网络套接字的特点

  • 随时与您的网站进行通信。

只需像这样将javascript放在html页面中

$(document).ready(function(){
    var socket = io.connect('http://localhost:8000/test');
});

现在您已连接到网站,所以接下来在您的 python 代码中..

@socketio.on('my event', namespace='/test')
def test_message(message):
    emit('my response', {'data': message['data']})

就像这个导入一样,发出并输入您的消息,您就可以开始了。更多详情请看这里http://flask-socketio.readthedocs.org/en/latest/

【讨论】:

  • 有点困惑。我没有得到我应该在服务器端附加我的代码的位置。那么我的 put 方法的 return 语句呢。
猜你喜欢
  • 2015-09-16
  • 2011-06-30
  • 1970-01-01
  • 2017-03-21
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
相关资源
最近更新 更多