2016-03-21 5 views
1

はのは、私がノードで動的に作成された配列を持っているとしましょう、と私はHerokuのダイナモ上でそれを実行しています:Herokuのダイノスでどのようにメモリが機能しますか?

var connections = []; 
var wm = new WeakMap(); 

io.sockets.on('connection', function(socket) { 

    socket.once('disconnect', function() { 
     connections.splice(connections.indexOf(socket), 1); 
     socket.disconnect(); 
     console.log("Disconnected: %s sockets remaining.", connections.length); 
    }); 

    socket.on('idAndApi', (data) => { 
     wm.set(socket, data); 
    }); 

    connections.push(socket); 
    console.log("Connected: %s sockets connected.", connections.length); 
}); 

さて、connectionsアレイとwm weakmapが他のdynos渡って作成することができ可能です。

herokuは各dynoでこれらの変数にまたがることができますか?または、情報を保持するために他のデータ構造(データベースなど)を使用する必要がありますか?

答えて

2

ダイノスは独立しており、ノードプロセスはステートレスでなければなりません(これは、どのような環境でも、Herokuなどにも当てはまります)。

あなたのアプリに最も適した状態で、管理して共有できる場所に外部に状態を保存します。 RedisとPostgresは、ノードの最も一般的なシステムの2つです。

あなたはsocket.ioを使っているので、あなたが複数のノードにまたがるための彼らのガイドに従ってくださいする必要があります:

http://socket.io/docs/using-multiple-nodes/

+0

私はそれがミニの例を提供しています参照してください。 'のvar ioは=必要(」 (redhat({host: 'localhost'、port:6379})); '' redhat = require( 'socket.io-redis'); '' しかし、特に英雄に焦点を当てた例がもっと豊富にありますか? –

+0

blog.heroku.comにはまだありませんが(ダイノスとスティッキーセッションでは、ヘロクのsocket.ioを使ってブログ記事を公開しようとしています) – hunterloftis

関連する問題