1

いくつかのライブ ツイートを取得するためにフラスコの socketio を使用しようとしています。しかし、私のテストでは、時々 400 (BAD REQUEST) が返されます。私は問題が何であるか疑問に思っています。

エラーサンプルは次のとおりです。

socket.io.js:3511 POST http://127.0.0.1:5000/socket.io/?EIO=3&transport=polling&t=LOMYW0D&sid=c81baa220764437184a14366357c6d3d 400 (BAD REQUEST)Request.create @ socket.io.js:3511Request @ socket.io.js:3424XHR.request @ socket.io.js:3352XHR.doWrite @ socket.io.js:3365(anonymous function) @ socket.io.js:3884(anonymous function) @ socket.io.js:4747proxy @ socket.io.js:1197(anonymous function) @ socket.io.js:4762(anonymous function) @ socket.io.js:4742exports.encodePacket @ socket.io.js:4541encodeOne @ socket.io.js:4741eachWithIndex @ socket.io.js:4760map @ socket.io.js:4767exports.encodePayload @ socket.io.js:4746Polling.write @ socket.io.js:3883Transport.send @ socket.io.js:2912Socket.flush @ socket.io.js:2623Socket.sendPacket @ socket.io.js:2683Socket.ping @ socket.io.js:2587(anonymous function) @ socket.io.js:2574 socket.io.js:3511 GET http://127.0.0.1:5000/socket.io/?EIO=3&transport=polling&t=LOMYPYb&sid=c81baa220764437184a14366357c6d3d 400 (BAD REQUEST)Request.create @ socket.io.js:3511Request @ socket.io.js:3424XHR.request @ socket.io.js:3352XHR.doPoll @ socket.io.js:3382Polling.poll @ socket.io.js:3795Polling.onData @ socket.io.js:3834(anonymous function) @ socket.io.js:3385Emitter.emit @ socket.io.js:4389Request.onData @ socket.io.js:3546Request.onLoad @ socket.io.js:3627xhr.onreadystatechange @ socket.io.js:3499 socket.io.js:3511 POST http://127.0.0.1:5000/socket.io/?EIO=3&transport=polling&t=LOMYeOF&sid=c81baa220764437184a14366357c6d3d 400 (BAD REQUEST)

私のサーバー側コード(pythonフラスコ):

from flask import Flask
from flask_socketio import SocketIO
app = Flask(__name__)
app.config["SECRET_KEY"] = "secret!"
socketio = SocketIO(app)

def root():
    return app.send_static_file("index.html")

@socketio.on("connect", namespace="/npTweet")
def connectServer():
    print("Client connected")
    socketio.emit("connected", namespace="/npTweet")


@socketio.on("startTweets", namespace="/npTweet")
def tweetStreaming():
    print("Start streaming tweets...")
    socketio.emit("streamTweets", {"stream_result": "test"}, namespace="/npTweet")


if __name__ == "__main__":
    socketio.run(app, debug=True)

私のクライアント側のコード:

socket = io.connect("http://" + document.domain + ":" + location.port + "/npTweet");
console.log("http://" + document.domain + ":" + location.port + "/npTweet");
// listen to the event 'connected'
socket.on("connected", function(data){
  console.log("listening connected...");
  socket.emit("startTweets")
});

socket.on("streamTweets", function(data){
  console.log("listen streamTweets...");
  console.log(data.stream_result)
});

これらは、index.html ページを開始したときの初期出力です。

http://127.0.0.1:5000/npTweet
listening connected...
listen streamTweets...
test

しかし、約 30 秒後に、前の 400 の不正な要求エラーが発生し始め、次の結果が続きました。

listening connected...
listen streamTweets...
test

それから 30 秒ほど経つと、悪いリクエストが実行され、結果が最初からやり直されます。私はどこで間違っていますか?どんな助けでも大歓迎です。

クライアント側では、socketio js 1.4.5 を使用しています

Python の場合: Flask-SocketIO==2.5 python-engineio==0.9.2

4

1 に答える 1

2

これは、こちらの GitHub の問題としても投稿されました。

flask run問題は、新しい Flask 0.11 CLI によると、Flask サーバーが として起動されたことです。残念ながら、サーバーを起動するこの方法は Socket.IO コードをバイパスします。if __name__ == 'main':解決策は、ブロック内のコードが実行されるように、スクリプトを実行することです。

于 2016-07-23T23:36:11.220 に答える