TL; DR:我正在使用后端的PRAW,Flask,Flask-SocketIO和前端的SocketIO JS库来处理应用程序,以便在发生时直播reddit评论。我有一个websocket配置为向后端发送授权代码,然后后端在拥有代码后将数据发送到前端。问题是前端Javascript在终端中Ctrl-C
之前显然没有收到任何数据。
这是相关代码
前端:
// Open up the websocket
var codeSocket = io.connect('http://' + document.domain + ':' + location.port + '/code');
var commentsSocket = io.connect('http://' + document.domain + ':' + location.port + '/comments');
// Send the authorization code to Flask when you connect to the socket
codeSocket.on('connect', function() {
codeSocket.emit('authorization_code', {code: getUrlParameter('code')});
});
// Do something with the data stream
commentsSocket.on('comment', function(data){
console.log(JSON.parse(data).id);
});
后端:
@socketio.on('authorization_code', namespace='/code')
def generate_comments(json):
code = json['code']
reddit = generate_reddit_instance()['instance']
reddit.auth.authorize(code)
def generate():
for comment in reddit.subreddit('all').stream.comments():
emit('comment', dumps({'id': str(comment)}), namespace='/comments')
return generate()
在Ctrl-C
终端之后,所有注释ID都出现在控制台中,如下所示:
此项目的完整源代码可在GitHub上获得,here。我还没有找到有同样问题的人,但也许今天我的Google-fu很弱。