これが判明しました: habrachat.org 。 カットの下の細部。

やる気
- 強力なx86コアが不要なタスクなど、軽量なものをARMサーバーにロードしたかったのです。 そのため、竜巻非同期サーバーと従来のチャットタスクを選択しました。
- habrahabrのチャットを見たことがありません。 IRCがありますが、私はそこに行くのが少なくなり、人々がそこにいる頻度も少なくなります。
- ルームサポート付きのトルネード+ redisの既製の簡単なチャットは見つかりませんでした。 一般に、この束と特に竜巻については、チャットの終了例はほとんどありません。 さらに、これらのチャットは一度に複数のコアで動作することはできませんでした(1つのインスタンスのみ)。
実装
- コンポーネントは、単純なnginx(WebsocketProxy)、Tornado(WebSocket)、tornado-redis、Redisによって取得されました。 クライアントのブートストラップ+ dojo。
- 承認は、開発速度を上げるためにuloginサービスを通じて実装されました。 そして一般的に、便利なサービス。
- テキストの書式設定は、Pythonのbbcodeライブラリを通じて実装されます。
- 最初はすべてを1日で非常に簡単に(約300行)実行しましたが、1つのインスタンスでしか動作しませんでした。 インスタンス間で同期をとることを決めたとき-私は苦しみました。 その結果、コードは540行に成長しました。
- ユーザーへのメッセージの送信が非常に単純なタスクであり、至る所で説明されている場合、隣接する「チャット」(インスタンス)へのメッセージの送信はすでにより困難です。 私がサインインする各「チャット」は、同じチャネルで、別の接続で(これはブロッキング操作であるため)再実行されます。 各「チャット」をオンにすると、すべてのユーザーに通知するリクエストが送信されます。このメッセージを受信したすべてのユーザーは、リストを全員に送信します。 将来、作成したメッセージを特定の「チャット」のユーザーだけでなく、特別なコールバック関数が機能する他のすべての「チャット」にも送信します。 多くの詳細がありますので、すぐにコードを見ることをお勧めします。
- コード自体はgithub.com/stalkerg/habrachatです。 多くの間違いがあり、多くは美しいアプローチではないので、見つけたらgitahbに書くかパッチをプッシュしてください(結果を急いで書きました)。 また、アイデアが気に入ったら、それを開発します。
加算
- ARMのUbuntuカーネルは基本的なnetfiltersのみで構築されているため、ポートをスキップすることさえできません。 その結果、ソースからnginxを収集し、WebSocketをプロキシしました。 :(
- 最近、GlobalTelで事故が発生し、ライトをオフにした後、サーバーは0で時間を失いました。 73歳 ARMにはおそらく問題があります。 私のsslが可能な限りバグがある理由を長い間考えていました。
PS誰かに本当に必要な場合、サービスは機能や他のものでいっぱいになり、松葉杖は削除されます。 ご希望のコメントを記入してください。
PS2ハブラー効果が貧弱な4核ARMサーバーを落とさないことを願っています。