7

Socket.ioの代わりに、SockJS(https://github.com/sockjs/sockjs-client)があります。これは、Socket.ioよりも保守がよく安定しているようです。

この質問は、たとえばチャットアプリケーションを構築するためにWebフレームワークでSockJSを使用するアーキテクチャの概念を理解することについてです。

私の現在の理解では、WebSocketを作成するには、SockJSクライアントとSocketJSサーバー(私の場合はSockJS-Tornado(https://github.com/MrJoes/sockjs-tornado)を使用する予定です)が必要です-スタイルのコミュニケーション。

しかし、SockJS(SockJS-client + SockJS-Tornado)は、残りの作業(たとえば、ページの提供、dbとの書き込み/読み取りなど)を実行するWebフレームワークとどのように連携しますか。たとえば、SockJS-TornadoコンポーネントはフレームワークのWebサーバーとどのように通信しますか?特に、web2py(python Webフレームワーク)でこれを行う方向性は高く評価されています。

4

3 に答える 3

4

そうです、SockJSには、sockjs対応サーバーとブラウザー内のjavascriptクライアントライブラリが必要です。

一般に2つの統合パターンがあります。たとえば、sockjs-tornadoを使用するとします。

  1. すべてのサイトをトルネードから提供している場合があります。それで、sockjs-tornadoを「http://mysite.com/sockjs」などのパスにフックします。このシナリオでは、Webサイトとsockjsの両方がmysite.comドメインから提供されます。
  2. 記述されている言語/フレームワークでサイトを維持し、sockjs-serverを別のコンポーネントとして別のドメインで追加することができます。「http://sockjs.mysite.com/sockjs」。

さらに、これの任意のバリエーションを使用できます。たとえば、内部に2つのサーバーがありますが、スマートロードブランカー(haproxyなど)を使用してそれらを1つのドメインとして公開します。

于 2012-05-08T10:50:04.533 に答える
1

フレームワークとしてweb2pyを使用している場合は、gluon/contribでcomet_messaging.pyを確認できます。これは、web2pyアプリからWebSocketクライアントにメッセージを送信するための関数(comet_send)を提供します。これはトルネード(SockJSサポートなし)に基づいていますが、DistributeHandlerはSockJS接続をサブクラス化してフォールバックトランスポートサポートを提供できます。このアプローチでは、クライアントはweb2pyコントローラー(または他のフレームワーク)によって処理される一般的なGETまたはPOST HTTPリクエストを介してメッセージを送信し、comet_messaging.comet_send()を呼び出すweb2pyコントローラーからメッセージを受信します。リスナーのリストにそれを出します。

comet_messagingの変更された行は次のようになります(openの通知はon_openになります):

class DistributeHandler(sockjs.tornado.SockJSConnection):
    def on_open(self, r):
    group,token,name = [None, None, None]
    self.group = group or 'default'
    self.token = token or 'none'
    self.name = name or 'anonymous'   

urls=[
    (r'/', PostHandler),
    (r'/token', TokenHandler),
    (r'/realtime', DistributeHandler)]

sockJS-tornadoが正規表現グループを窒息させていたため、DistributeHandlerURLSpecの正規表現グループを削除する必要があることに注意してください。まだon_openハンドラーへのパスからパラメーターを取得する方法を理解しようとしています。

于 2012-05-29T00:09:57.470 に答える
0

これは、SockJSをDjangoに統合する方法に関する完全な回答を提供します:https ://stackoverflow.com/a/10950702/675065

基本的に必要なもの:

  • トルネード+SockJS-トルネード
  • Redis + Brukva

私は自分のプロジェクトでこの構成を使用していますが、かなりうまく機能しています。

または:アウトバーンの方法を試してみてください:http://autobahn.ws/(まだ試していません)

于 2013-02-07T08:53:16.503 に答える