1

gevent-socketio に小さなサンドボックス サーバーがありました。

バックエンドは

from flask import Flask, render_template, request
from socketio import socketio_manage
from socketio.namespace import BaseNamespace
from socketio.server import SocketIOServer

class FirstNamespace(BaseNamespace):
    def on_make_upper_hook(self, msg):
        response = {'response from make_upper':msg.upper()}
        self.emit('response_channel', response)
        return True

app = Flask(__name__)
app.config['DEBUG'] = True

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/socket.io/')
@app.route('/socket.io/<path:remaining>')
def socketio_endpoint(remaining=None):
    print('remaining path: {}'.format(remaining))
    socketio_manage(request.environ,
                    {'/chat': FirstNamespace})
    return 'ok'


if __name__ == '__main__':
    SocketIOServer(('0.0.0.0', 8080), app,
        resource="socket.io").serve_forever()

そしてフロントエンド(とsocket.io 0.9.6)は

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="static/socket.io.js"></script>
    <script>
        var socket = io.connect('/chat');
        socket.on('connect', function () {
            console.log('socket connected');
        });
    </script>
</head>
<body>
</body>
</html>

ブラウザ コンソールで、接続が正常に行われたことを確認しました。サーバーも問題ありませんでした:

127.0.0.1 - - [2015-07-05 10:30:55] "GET / HTTP/1.1" 200 420 0.006791
remaining path: 1/websocket/683868734428

しかし!

socket.io次のようにアップグレードしようとしたとき:

<script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
<script>

    var socket = io('http://localhost:8080/chat');
    socket.on('connect', function () {
        console.log('socket connected');
    });

</script>

クライアントエラーが発生し始めました

GET http://localhost:8080/socket.io/?EIO=3&transport=polling&t=1436081649609-0 500 (Internal Server Error)

およびサーバー エラー:

File "/Users/1111/.virtualenvs/stuff/lib/python2.7/site-packages/socketio/__init__.py", 
line 67, in socketio_manage
socket = environ['socketio']
KeyError: 'socketio'

どういうわけか、大切なsocketio鍵が から消えrequest.environてしまい、取り戻す方法がわかりません。これを修正する方法は?

4

0 に答える 0