flask融合grpc

先写 .gropo文件,传输数据

python -m grpc_tools.protoc -I.  --python_out=. --grpc_python_out=.reco.proto  
  • -I 需要导入的proto文件从哪个目录中寻找 (-I. 表示从当前目录中查找)
    ---python_out proto文件中定义的message 字段生成的python代码文件保存到哪个目录
  • --grpc_python_out proto文件中定义的service 字段生成的python代码文件保存到哪个目录

在这个文件夹右击 updown把那两个文件下载下来
在项目代码的__init__文件中写这段代码表名项目启动就会一直连接server不会断开

app.rpc_reco = grpc.insecure_channel(app.config['RPC'].RECOMMEND)

在settings中设置IP:端口

    class RPC:
        RECOMMEND = '127.0.0.1:8888'

哪个功能模块需要数据,就在那里写核心代码,以下仅供参考

class ArticleListResource(Resource):
   """
   获取推荐文章列表数据
   """
   def _feed_articles(self, channel_id, timestamp, feed_count):
       """
       获取推荐文章
       :param channel_id: 频道id
       :param feed_count: 推荐数量
       :param timestamp: 时间戳
       :return: [{article_id, trace_params}, ...], timestamp
       """
       stub = reco_pb2_grpc.UserRecommendStub(current_app.rpc_reco)

       # 通过工具对象 进行rpc函数调用
       req = reco_pb2.UserRequest()
       req.user_id = str(g.user_id) if g.user_id is not None else 'Anony'
       req.channel_id = channel_id
       req.article_num = feed_count
       req.time_stamp = timestamp

       ret = stub.user_recommend(req)
       # ret -> ArticleResponse对象
       pre_timestamp = ret.time_stamp
       article_id_list = ret.recommends

       return pre_timestamp, article_id_list

   def get(self):
       """
       获取文章列表
       /v1_1/articles?channel_id×tamp
       """
       # 检验参数
       rp = RequestParser()
       rp.add_argument('channel_id', type=parser.channel_id, required=True, location='args')
       rp.add_argument('timestamp', type=inputs.positive, required=True, location='args')
       req = rp.parse_args()

       channel_id = req.channel_id
       timestamp = req.timestamp
       per_page = constants.DEFAULT_ARTICLE_PER_PAGE_MIN

       # 业务处理
       #   调用推荐系统 获取推荐文章
       pre_timestamp , article_id_list = self._feed_articles(channel_id, timestamp, per_page)

       #   查询文章数据
       results = []
       for article_item in article_id_list:
           # article_item -> Article
           article_id = article_item.article_id
           article_dict = cache_article.ArticleInfoCache(article_id).get()

           article_dict['track'] = {
               'click': article_item.track.click,
               'collect': article_item.track.collect,
               'share': article_item.track.share,
               'read': article_item.track.read
           }
           results.append(article_dict)

       # 返回
       return {"pre_timestamp": pre_timestamp, "results": results}

你可能感兴趣的:(grpc)