1

私は、cherrypy セッションで自分のやりたいことを実行するのに苦労しています。ユーザーとの個別のチャットに参加するアプリがあります (各ダイアログには一意の dlg_nbr があります)。別々のダイアログが混在するまで (以下のログ出力の最初の 2 サイクルを参照)、正常に動作しているようです (私が同時に投稿した場合)、user1 は user2 を対象とした応答を取得し始めます (ログ出力の 3 番目のサイクル)。処理されます。

私のメイン関数 ( think() ) が、セッション [dlg_nbr] として保存する各ユーザーに固有の dlg_nbr を使用して返す場合、これにより、応答/要求サイクル全体での継続性が保証されると考えていたでしょう。セッションはそれぞれに固有です。ユーザーですよね?

チェリーピーのマルチスレッドは、物事が並行して処理されていることを意味するかもしれないことを理解していますが、確かにセッションが混在するべきではありませんか? これは私を夢中にさせています、これはcherrypyの機能ですか、何が間違っていますか?

チェリーピーコード

class Web:

    def rsp(self, stm=''):

        print '    10 SESSION ID ON REQUEST', cherrypy.session.id
        dlg_nbr = cherrypy.session.get('dlg_nbr')

       # main logic of app
        rsp, dlg_nbr = B.think(stm, dlg_nbr)

        print '    20 SESSION ID AFTER PROCESSING REQUEST', cherrypy.session.id
        cherrypy.session['dlg_nbr'] = dlg_nbr

    return rsp

if __name__ == '__main__':
    cherrypy.config.update(
         {'server.socket_host': config.HOST,
         'server.socket_port': config.PORT})

    STATIC_DIR = os.path.join(os.path.abspath("."), u"static")
    dev_config = {
        '/': {'tools.caching.on': False, 'tools.sessions.on': True},
        '/static': {'tools.staticdir.on': True,
        'tools.staticdir.dir': STATIC_DIR}}

    cherrypy.quickstart(Web(), config=dev_config)

ajax投稿:

$.ajax({
            url: '/rsp',
            data: {stm: input_string},
            type: "POST",
            timeout: 10000,
            success: function(response) {......}

ログ出力:

# Expected result for remote user
192.168.1.2 - - [04/Oct/2013:23:22:05] "POST /rsp HTTP/1.1" 200 65 "http://192.168.1.4:8003/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36"
    10 SESSION ID ON REQUEST 6125bf1b113e2da09e4653e8eccf0bd3b7240ddb
    20 SESSION ID AFTER PROCESSING REQUEST 6125bf1b113e2da09e4653e8eccf0bd3b7240ddb

# Expected result for localhost
127.0.0.1 - - [04/Oct/2013:23:22:09] "POST /rsp HTTP/1.1" 200 8 "http://localhost:8003/" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36"
    10 SESSION ID ON REQUEST d09998f541d6a19742b8d73314a1dba6bba42a84
    20 SESSION ID AFTER PROCESSING REQUEST d09998f541d6a19742b8d73314a1dba6bba42a84

# Local host seems to get result of post made by remote user (when submitting stm at the same time)
192.168.1.2 - - [04/Oct/2013:23:22:14] "POST /rsp HTTP/1.1" 200 33 "http://192.168.1.4:8003/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36"
    10 SESSION ID ON REQUEST 6125bf1b113e2da09e4653e8eccf0bd3b7240ddb
    10 SESSION ID ON REQUEST d09998f541d6a19742b8d73314a1dba6bba42a84
    20 SESSION ID AFTER PROCESSING REQUEST 6125bf1b113e2da09e4653e8eccf0bd3b7240ddb

# finally remote user gets expected result, (but seems out of synch)
127.0.0.1 - - [04/Oct/2013:23:22:19] "POST /rsp HTTP/1.1" 200 17 "http://localhost:8003/" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36"
    20 SESSION ID AFTER PROCESSING REQUEST d09998f541d6a19742b8d73314a1dba6bba42a84
4

1 に答える 1