2

私は、php とフォルダーを変更する python スクリプトを使用する web プロジェクトを持っています。たとえば、に基づいて、WebサイトでJavaScriptを実行したい。python スクリプトで行われるフォルダーの作成。

私の考えは、python socketio で作業することでした。私は基本的な接続通知を機能させており、ウェブサイト上の js からの出力も js によって処理されています。

問題は、イベントレット サーバーの起動後にイベントを発行できないことです。非同期モードを設定しようとしましたが、望ましい結果が得られません。

これまでの私のコードは次のとおりです。

import socketio
from flask import Flask, render_template
import eventlet

import sys

sio = socketio.Server(async_mode='eventlet')
app = Flask(__name__)

@sio.on('connect')
def connect(sid, environ):
    print('connect ', sid)
    sio.emit('channel', 'new connection')
    sys.stdout.flush()

@sio.on('mes')
def message(sid, data):
    print('message ', data)
    sys.stdout.flush()

app = socketio.Middleware(sio)

eventlet.wsgi.server(eventlet.listen(('', 8000)), app)

# create folder HERE and emit event which will be sent to browser

アップデート:

次のコードのようなスレッドの使用を開始しました:(そのようなスレッドの使用に問題はありますか?または別のより良いアプローチですか?)

import socketio
from flask import Flask, render_template
import eventlet

import sys
import thread
import time

sio = socketio.Server(async_mode='gevent')

@sio.on('connect')
def connect(sid, environ):
    print('connect ', sid)
    sio.emit('channel', 'new connection')
    sys.stdout.flush()

@sio.on('mes')
def message(sid, data):
   print('message ', data)
   sio.emit('channel', 'yeah')
   sys.stdout.flush()

from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler
app = socketio.Middleware(sio)

def worker( threadName ):
   count = 1
   while count > 0:
      time.sleep(1)
      # trying to emit message HERE
      sio.emit('mes', 'foo ' + str(count))
      print "working " + str(count)
      sys.stdout.flush()
      count += 1

def server( threadName ):
   print "server starting"
   sys.stdout.flush()
   pywsgi.WSGIServer(('', 8000), app, handler_class=WebSocketHandler).serve_forever()

try:
   thread.start_new_thread( worker, ("Thread-1", ) )
   thread.start_new_thread( server, ("Thread-2", ) )
except:
   print "Error: unable to start thread"

while 1:
   pass

問題はsio.emit('mes', 'foo ' + str(count))、 がメッセージを発行することですが、ブラウザは 20 ~ 30 秒ごとにメッセージをキャッチするだけで、不足しているすべてのイベントが処理されます。開発コンソールからのフレームを含む画像を参照してください。

ネットワーク フレーム

4

1 に答える 1