先写 .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}