2016-09-25 30 views
0

私はwebsocketサーバー用に動的に作成された部屋を作成しようとしています。私のファイルサーバーは、処理の進捗状況やそのようなもののように、クライアントがアップロードしたファイルに関する情報をクライアントに伝える必要があります。これは私の見解です。websocket server expressjsの動的ルーティング

export function myView(req, res) { 

    let file = req.file; 
    let socketpath = ('/sockets/' + socketid + '/') // A randomly generated id 
    let wss = new WebSocketServer({port: 3030, path: socketpath}); 

    ... 
} 

これは一度しか動作しません。できるだけ早く私は、サーバーに別のファイルを送信してくださいとして、私はこのエラーを取得する:私は、同じポートで別のWSSを作成していますので、

Error: listen EADDRINUSE 0.0.0.0:3030 
    at Object.exports._errnoException (util.js:873:11) 
    at exports._exceptionWithHostPort (util.js:896:20) 
    at Server._listen2 (net.js:1250:14) 
    at listen (net.js:1286:10) 
    at net.js:1395:9 
    at nextTickCallbackWith3Args (node.js:453:9) 
    at process._tickDomainCallback (node.js:400:17) 

これは明らかです。しかし、私は各クライアントセッションのアップロードのための部屋が必要です、どうすればいいですか?

編集:私はこれをgoogleしましたが、何も見つかりませんでした。

+0

動的ルートとは何ですか、なぜそれが必要だと思いますか?解決しようとしている実際の問題を説明する必要があります。すべてのクライアントに対して別々のwebSocketサーバーを作成する必要はありません。すべてのクライアントが接続する1つのサーバーを作成することができます。通常、クライアントは自分自身(誰であるか)を識別して、1つのサーバーがすべてのニーズに対応できるようにします。複数のサーバーを作成する場合は、それぞれ異なるポートに接続する必要があります。クライアントがアクセスできるようにCORSを使用する必要があります。 – jfriend00

+0

@ jfriend00混乱して申し訳ありませんが、私はウェブソケットにはまったく新しいものです。ルートとは、クライアントが接続できる「部屋」のような意味です。したがって、たとえば:websockets.com/someroomまたはwebsockets.com/someroom2 –

+0

クライアントに1つのWebSocketサーバに接続し、その後、どの部屋を希望するかについてのメッセージを送信してください。そして、あなたの質問を編集してくださいこれは単にコメントに入れるのではなく、または、クエリパラメータを使用して、最初の接続時に部屋を指定します。 – jfriend00

答えて

1

通常、サーバーは1つだけ作成され、すべてのクライアントはその1つのサーバーに接続します。クライアントは、接続URLでクエリパラメータを使用するか、または接続後に参加したい部屋を指定してサーバーにメッセージを送信することによって、接続したい部屋を指定できます。 1つのサーバー上のどの部屋にどのソケットがあるかを把握して、サーバーがその部屋で必要な機能を実装できるようにします(部屋 "xxx"にあるすべてのユーザーにメッセージを送信する、または他のすべてのユーザーにメッセージを送信するなど)部屋 "xxx"で)。

複数のサーバーを作成する唯一の方法は、それぞれ独自のポートに接続することですが、クライアントは接続するポートを知っている必要があり、CORSを実装してブラウザが接続を許可する必要があります。別々の接続ごとに固有のサーバーが本当に速くなり、一般的には必要ありません。

関連する問題