問題タブ [ws4py]
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.
python - ws4py を使用して独自のアプリケーションを作成する
ws4py を使用して、cherrypy を使用する Web サーバー ソケットを作成しました。それを使用してサーバーに接続すると、ip:port
完全に接続され、複数のブラウザーを介してチャットできます。ただし、接続しようとするip:port/ws
と機能します。
しかし、 を使わずに接続しws
たら握手できなくなりました。ip:port/app
クライアントブラウザからのすべてのリクエストを処理したいのですが、この URL で c# を使用してクライアントからペイロードを送信 するなど、さまざまなソースから別のリクエストを処理することもできます。
このコマンドで ws4py をインストールしましたsudo pip install ws4py
。サーバー スクリプトは次のとおりです。
python - ws4py ソケット ハートビートで CherryPy を作成する
これを無駄にする方法を探すのに約5時間を費やしました。
チェリーピーの上にws4pyを使用しています。現在、接続が物理的に失われた場合 (WiFi をオフにした場合など)、サーバーからメッセージが送信されるまで接続は終了しません。メッセージが送信された時点で、切断された回線が検出され、ソケットがクリーンアップされます。
これにより問題が発生しており、ソケットがなくなっているかどうかをすぐに知る必要があります。
ws4pyのファイル「websocket.py」には「Heartbeat」というクラスがあり、これは私が望むものとまったく同じように見えます.「heartbeat_freq」パラメーターが渡された場合、「WebSocket」内にインスタンスが作成されると思います。
上記は ws4py ctor ですが、このコードがどこから呼び出されているのかわかりません。私が知っているのは、CherryPy コールバック システムに結び付けられているということです。これが私が見つけたものです。
上記の ctor は、関数内の「cherrypyserver.py」から呼び出されます。
この関数は、関数内の _cprequest.py から呼び出されるため、コールバックのようです
今はもう少し多くのものが出回っていますが、正直なところ、私はちょっと迷っており、これは間違っていると思います.
私が理解できることから、コールバックの「heartbeat_freq」パラメーターを設定する必要がありますが、このパラメーターをどこに設定するかわかりません。以下のコードは、コールバックがインスタンスを作成する「WebSocket」ハンドラー クラス (websocket2.Handler は「WebSocket」から継承) を指定する場所です。
この「ルートマップ」のどこかにパラメータを指定する必要があると思います。誰もこれを行う方法を知っていますか。
明確にするために、サーバーが各ピアのハートビートを作成するようにします。これは、「heartbeat_freq」値を渡すことによって行われると思います。
現在、私は個人的に好きではないハートビートを全員にブロードキャストしています。
websocket - 実行中の CherryPy アプリケーションに websocket 対応のパスを追加するにはどうすればよいですか?
ws4py を使用して、CherryPy で「websocket 対応」パスを動的に作成/破棄しようとしています。問題を示す完全なプログラムを次に示します。
これは私が作成できるのと同じくらい簡単な例です: Root クラスがメイン アプリケーションとして配置され、ws4py config ディレクティブがws://localhost:9000/other
. このadd()
メソッドは、新しいアプリケーションを作成し、それを適切なパスにマウントして、「/other」アプリケーションのセットアップを模倣します。
サーバーを起動したら、Chrome の JavaScript コンソールで次の操作を実行できます。
素晴らしい、うまくいきます!
ここhttp://localhost:9000/add/eagle
で、ブラウザーでアクセスした後 (新しいパスを作成するため)、コンソールに次の交換が表示されます。
うーん...なぜ私は 301 を取得するのですか? 「/bird/eagle」と、「追加」パスを使用して「作成」しなかった他のパスとの違いを示すためだけに:
404 は理にかなっています。サーバーにはそのようなパスはありません。しかし、この websocket 作成目的専用の新しいアプリをマウントした後、なぜ 301 を取得するのでしょうか? サーバーの起動時に設定されたもの (パス「/other」上) とは異なる動作をするのはなぜですか? そして、私が求めているこの行動を達成するために、私は何を別の方法で行うことができますか?
python-3.x - Python 3でTextMessage ws4pyを読む
ws4py 0.3.2 を使用し、python 3.3.2 で cherrypy 3.2.4 を使用する Web サーバーソケットを作成しました。クライアントのメッセージを印刷しようとすると、このようにサーバーに送信されます
エラーメッセージが表示されました:
proxy - Flask と WebSocket-for-Python (ws4py) を使用した IPython Notebook の WebSockets プロキシ
ipython-notebook-proxyに触発され、ipydraに基づいており、後者を拡張して、より複雑なユーザー認証とプロキシをサポートします。私の使用例では、ポート 80 のみを公開できるためです。
ワーカーにフラスコ ソケットを使用してgunicorn
いますが、WebSocket のプロキシに問題があります。IPython は/shell
、/stdin
、およびの 3 つの異なる WebSockets 接続を使用しますが、最初の 2/iopub
つのみしか取得できません。101 Switching Protocols
と/stdin
すぐConnection Close Frame
に作成されます。
問題の抜粋コードは次のとおりです。
また、独自の WebSocket プロキシ クラスを作成しようとしましたが、どちらも機能しません。
通常のリクエストとレスポンスのサイクルは魅力的なので、そのコードを削除しました。興味がある場合は、完全なコードがhidraにホストされています。
サーバーを実行します
wordnet - WordNet ベースの類似度の最大スコア
最短経路や WUP など、類似性スコアの範囲は 0 から 1 の間です。したがって、車と自動車の類似度は 1 になりますが、LCh などの他の尺度は
これらのメジャーの最大スコアを知りたいです。3.6889 は最大値と見なされますか? これらは、LCH スコアが 0 から 3.6889 の間であることを意味します。
以下の対策を追加します
python-3.x - WSGI の下の cherrypy の下の ws4py: 例外 AttributeError: 'mod_wsgi.Input' オブジェクトに属性 'rfile' がありません
openshift.com サーバー (サポートする必要があります) に websocket を実装しようとしています。
openshift.com は WSGI を提供してくれるので、そこに my を埋め込み、cherrypy
スクリプトがオブジェクトwsgi.py
を定義するようにしapplication
ます。cherrypy
で定義されているように、websocket ツールもありますws4py
。
これは、OpenShift の WSGI で動作する最小限のチェリーピー アプリケーションであり、websocket も使用する必要があります。
Websocketを作成する場合 ( に接続する場合ws://myserver:8000/ws
) を除いて、すべてがうまく機能します。これは、取得したスタック トレースです。
(ファイル名から絶対パスを手動で削除しました) PS: python3.3
, cherrypy==3.5.0
,を使用しws4py==0.3.4
ます。
それは私には明らかではありません:
- これが、WSGI 環境での cherrypy と ws4py の間の互換性の欠如である場合。
- WSGI環境でws4pyの問題なら
- Openshift Websocket のポートが http とは異なるためである場合
PPS: これは完全な OpenShift プロジェクトであり、自分で実行して試すことができます: https://github.com/spocchio/wsgi-cherrypy-ws4py
python - ws4py を使用してサーバー側で他の WebSocket にアクセスするにはどうすればよいですか?
ws4py は、基盤となるサーバー (gevent など) から独立した WebSocket の抽象化を提供することになっている WebSocket タイプを提供します。
私の問題は、サーバー側で gevent を使用する場合、すべての websocket のグローバル コンテナーにアクセスできるものがないことです。ここのドキュメントの設計セクションには、個々の Web ソケットを管理する WebSocketManager のグローバル インスタンスがあると記載されています。同じページの呼び出し図は、物事を管理するサーバー側にマネージャー インスタンスがあることを意味します。
他のソケットにアクセスしてそれらを書き込む必要があるため、単純なチャットサーバーを作成することさえできませんが、これを可能にする抽象化を見つけることができませんでした。gevent の場合、他の greenlet または他の greenlet によって提示された websocket にアクセスする必要があります。
ws4py に付属するチャットの例では、Cherrypy 固有の機能を使用しているため、やりたいことを行うには gevent 固有の方法を実装する必要があると思います。
ここに機能がありませんか?サーバー側でgeventが使用されているときにWebソケットがメッセージを受信したときに、サーバー側のすべてのWebソケットにアクセスするにはどうすればよいですか?