2017-07-04 12 views
0

WebSocket接続を受け入れるバックエンドサーバーが完成しましたので、拡張可能な&のテスト可能なアーキテクチャーを実装する必要があります。拡張可能(多層)アーキテクチャのWebSocketサーバーアプリケーション

[https://github.com/websockets/ws] wsが私に提供するものは、新しいメッセージを受信するよりも簡単なwebsocketサーバーです。私が同じswitch文の中で50種類以上のメッセージを実装すると、そのメッセージは急速に制御から外れます。

私は、メッセージの流れをより分かりやすく分ける方法について、いくつかのアドバイスやアイディアを持っています。

答えて

0

問題を解決する最も簡単な方法は、ルーティングモジュールと組み合わされたフレームワークを使用することです。これにより、余分な労力を費やすことなくコードを管理するメッセージ管理の管理が可能になります。

このような組み合わせの良い例は、express-ws moduleで表されます。 Express-wsはwsモジュールの上に構築された構文的な砂糖です。とりわけ、ルータのミドルウェアを使ってメッセージを管理することができます。

ws.on('message', function(msg) { 
    MessageController.handler(msg); 
}); 

次のステップでは、一つの巨大なファイルを持っていないために事業領域に応じて、別々のファイルにあなたのルートを壊すことになります。

const expressWs = require('express-ws')(app); 

const router = express.Router(); 

router.ws('/echo', function(ws, req) { 
    ws.on('message', function(msg) { 
    ws.send(msg); 
    }); 
}); 

app.use("/ws-stuff", router); 

また、あなたは、このような「コントローラ」にロジックを扱うメッセージを移動することができますすべてのルーティングで

+0

私が理解する限り、ルーティングパターンは複数の異なるエントリポイント(wsアドレス)を持つためのものです。私の問題は、1つのエントリポイント(wsアドレス)に対して明確なアーキテクチャを持っていますが、100種類以上の異なる種類のメッセージを持つことです。 2番目のアプローチは、私が探しているものに似ています。しかし、このハンドラがwsオブジェクトにどのように届くのでしょうか?それをパラメータとして渡す必要がありますか?もしそうなら、コントローラー内にwebsocketサーバーオブジェクトが必要ですか?だから、私もサーバーを渡す必要がありますか? (コントローラ内の他のクライアントにアクセスするため) –

関連する問題