問題タブ [gevent-socketio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2454 参照

django - dotcloud上のgunicorn、nginx(v 1.3.14)、django、およびgevent-socket.io

dotcloudのnginx(v 1.3.14)の背後にgunicorn+geventをデプロイしようとしています。それについていくつか質問があります。私はpython-on-dotcloudの例を適応させることを目指しています。これまでのところ、このセットアップでWebSocket部分を機能させることはできませんでした。つまり、socket.ioを介してではなく、手動でページを更新して更新を取得する必要があります。これはすべて私にとってはかなり新しいので、まったくのnoobエラーである可能性があります。これが関連する質問です。

python-on-dotcloudの例に加えた変更は次のとおりです。

  1. どうやらnginx(バージョン1.3.13以降)はWebソケットをサポートしています。この開発バージョンを指すように、python-on-dotcloudの例からビルダースクリプトを更新しました。nginx_download_url="http://nginx.org/download/nginx-1.3.14.tar.gz"

  2. UNIXソケットにバインドするようにgunicornを設定してから、nginx.confからproxy_passを設定して、proxy_pass http://appserver;appserverを定義した場所でトラフィックをgunicornにアップストリームで送信します。

  3. nginxを実行しなくても正常に動作するgevent-socket.ioを使用してdjangoアプリを実行しています。(私はgunicornをdotcloud.ymlの0.0.0.0:$ PORT_WWWにバインドするだけです)

私の質問はこれらです。

  1. 私は問題のないものを解決しようとしていますか?

    a。gunicornをnginxの後ろに置くことをお勧めするところで、かなりの量の読書をしました。最前線にあるdotcloudのロードバランサーのコンテキストでは、これはまだ本当ですか?

    b。DoS攻撃を受けるとは思わない場合でも、gunicornをnginxの背後に配置することは重要ですか?

  2. セットアップを試みたときに、UNIXソケットを介してWebSocketを実行することは可能ですか?

  3. UNIXソケットはdotcloudのスケーリングを壊しますか?

  4. 代わりにポートを使用する必要がある場合、どのように設定しますか?同じアプリで2つのhttpポートを割り当てることはできないと思います。それを2つのアプリに分割した場合、PORT_WWW環境変数をgunicornアプリからnginxアプリに渡して、最終的にnginxポストインストールスクリプトで使用できるようにし、結果としてnginx.confで使用できるようにする方法がわかりません。

  5. なぜこれがそのまま機能しないのかについてのアイデアはありますか?

以下に3つの設定ファイルを含めました。他の人が助けてくれるかどうか教えてください。ありがとう!

dotcloud.yml

nginx.conf.in(通常のnginx.confと同じですが、PORT_WWWが実際のポート番号と交換されるのを待っているだけです)

gunicorn.conf

0 投票する
0 に答える
870 参照

python - 実行中のFlask+Gunicorn + SocketIO

フラスコアプリ用にSocketIOServerを実行していて、次のようなrun.pyスクリプトがあります。

run_appは次のようになります。

私はこれを次のように実行します:python run.py product / dev/testなど。

今度はgunicornを使用して本番環境で実行したいと思います。オンラインのすべてのチュートリアルでは、次のようにすることを提案しています。gunicorn run:app -c gunicorn-config.py私の問題は、アプリだけを実行したくないということです。代わりに、SocketIOServerでserve_foreverメソッドを実行するようにgunicornに指示したいのですが、オンラインで多くの調査を行ったので、これを実現する方法を見つけることができません。助けてください。

0 投票する
2 に答える
2658 参照

python - サーバー側で SocketIO イベントを発行する方法

gevent-socketio Django アプリケーションを実行しています。

私はこのクラスに似たものを持っています

ただし、JavaScript クライアントからイベントを受信すると、すべてが機能し、たとえばsendイベントが正しく処理されます。

emitサーバー側で何らかのイベントが必要な場合、私は少し迷っています。私はクラス内でそれを行うことができますsocket.send_packet

しかし、今、いくつかのイベントをpost_saveシグナルにリンクしたいので、send_packetこの名前空間クラスの外からしたいのですが、これを行う1つの方法は次のようになります

ConnectNamespaceInstance のインスタンスを取得する方法がわかりません

post_save要約すると、シグナルを受信した後、JavaScriptクライアントにイベントを送信したいだけです

0 投票する
1 に答える
1027 参照

django - スケールGeventSocketio

現在、Djangoを使用してサイトをセットアップしています。チャット機能を追加するためにGeventSocketioを追加しました。すでにサイトにかなりの数のユーザーがいて、そうする方法を見つけることができないので、私はそれを拡大縮小する必要があります。

https://github.com/abourget/gevent-socketio/tree/master/examples/django_chat/chatを試しました

私はGunicornとsocketio.sgunicorn.GeventSocketIOWorkerワーカークラスを使用しているので、最初はワーカー数を増やすことを考えました。残念ながら、これは断続的に失敗するようです。見つけたいくつかのソースからのredisを使用するように書き直し始め、各サーバーに1人のワーカーがいて、現在負荷分散されています。ただし、これには同じ問題があるようです。gevent socketioコード自体に、スケーリングできない問題があるかどうか疑問に思っています。

これが私が始めた方法です。これは単なる送信メッセージコードです。

0 投票する
1 に答える
2829 参照

websocket - phantomjs、socket.io、および gevent-socketio を連携させる

Phantomjs 1.7 (ブラウザーをシミュレート) を利用するアプリケーションを構築し、Python バックエンドを作成していくつかのイベントを起動し、データを収集しようとしています。

問題は、Phantomjs と私の Python プログラムの 2 つのプロセスが双方向で通信する必要があることです。問題は、内部page.evaluateで次のことができないことです。

  • 「fs」などの複雑なオブジェクトを渡す (stdin から読み取る)
  • Python スクリプトに接続する WebSocket を作成する
  • 他の形式のプロセス間通信は制限されています

だから私の解決策は簡単です:

  • 表示しているページに socket.io js を挿入します。
  • gevent-socketio を使用して実装されている Python サーバーに接続します

page.evaluate 内から接続しようとすると、次のようになります。

Phantomjs スクリプトは次のとおりです。

サーバー側の Python スクリプトは次のとおりです。

0 投票する
0 に答える
633 参照

python - apache と gevent(django-socketio) を連携させる

私はpython、django、そして最近django-socketio(https://github.com/stephenmcd/django-socketio)を使用してubuntu 12.04に取り組んでいます。私の問題は、ソケットを介してサーバーに何かを送信し、送信されないときに送信されるのを待つときです。django サーバーはデフォルトの http ポート (80) で実行されています。そして8080ポートのsocketio。' http://mysite.com/ ' のように自分の Web サイトにアクセスすると、socketio を使用するページがまったく機能しません。しかし、8080 ポートを使用すると、すべてが機能します。

リクエストを処理するために socketio サーバーを使用しない理由 (manage.py コマンドを入力して開始するサーバーがあります) は、Apache を使用してそれを行う方法がわからないためです。wsgi ファイルの設定に行き詰まりました。私がこれまでに知っていることは、SocketIOServer を django アプリケーションなどにアタッチする必要があるということです。これを試してみましたが、成功しませんでした。

私の質問は次のとおりです。どうすればこれを機能させることができますか? おそらく、あるポートで1つの処理を行い、他のポートで別の処理を行うとうまくいくはずです。しかし、これも試しました。

多くの非同期リクエストがあるため、本当にajaxを使用したくありません。

何かお願いします!

前もって感謝します。

0 投票する
1 に答える
330 参照

python - 本番環境での django-socketio の開始

Django-socketioをインストールしたのは、チャットを自分で実装するのに最適な方法だと思われるからです。私が抱えている問題は、実行する python manage.py runserver_socketio host:portと実行され、ターミナルを閉じることができないか、動作が停止することです。どうすればそれを回避できますか?

0 投票する
1 に答える
193 参照

python - pyramid_sockjs でメッセージングを使用するには?

私は、pyramid_sockjsを使用して Pyramid アプリケーションを構築しています。このアプリは、redis pub/sub または rabbitmq からの着信メッセージに反応する必要があります。メッセージング システムをリッスンし、sockjs クライアントにメッセージを送信して反応するロジックをどこにプラグインする必要がありますか?

socket.io のこのリンクを見つけました。sockjs と Pyramid で同じことをしたいと思います。

0 投票する
0 に答える
207 参照

django - gevent-socketio: ブラウザが別のブラウザの応答を受信して​​います

私はこれを数日間試してきましたが、これについて頭を包むことができないようです. 私の問題は本質的に、2 つのブラウザーが同時に要求している場合、サーバー側の socketio 応答が間違った結果を要求しているブラウザーに返す (結果が入れ替わる) という事実にあります。私の問題は、socket.io がどのブラウザーに結果を返すかを決定する方法がわからないことだと思います。現在のコードには多くの可動部分があり、人々が意味を理解できるように削除するのは面倒なので、代わりに、誰かが私を助けて django_chat の例を理解するのを手伝ってくれれば、バグを解決できると思いますhttps://github.com/abourget/gevent-socketio/tree/master/examples/django_chat . だからここに行きます:

順番に、ユーザーがチャットに何かを入力すると、このコードが起動します

次に、関数はクラスでこの関数socket.emitをトリガーします。ChatNameSpace

emit_to_room次に、RoomsMixin クラスにあるこの関数を呼び出します。

[rooms]ユーザーがチャット ルームに参加すると、そのユーザーが属するチャット ルームでセッションが更新されることを理解しています。['/chat_1', '/chat_2']部屋のオブジェクトの主キーを表す数字のようなものです。

これは私が迷子になるところです。この特定のチャットルームの区別は、フロントエンドの js コードとどこで一致しますか? エミット関数は、応答をどの部屋に送信するかをどのように知るのでしょうか?

0 投票する
0 に答える
395 参照

gevent-socketio - gevent-socketio でのハートビート タイムアウト

アプリケーションで gevent-socketio を使用しています。ユーザーがセッションを適切に終了しなかった場合でも ( socket.disconnect()JS から呼び出して)切断されたユーザーに関する情報を取得する必要があります。私が理解したように、ドキュメントは古くなっています - そのバージョンは 0.3.1 ですが、コードのバージョンは 0.3.5-rc2 です (そして、それは利用可能です)。

gevent-socketio でハートビート タイムアウトを設定するにはどうすればよいですか?

ありがとう、ボリス。