3

p:dataTable各行に金融商品とリアルタイムの価格を表示していますが、各行に1つのチャネルを使用してブロードキャストチャネルを設定したいと思いますp:socket。目標は、1つの機器に新しい価格が設定されたときに、パフォーマンスを向上させるためにそのセルのみを更新できるようにすることです。

最初に、サーバー側からの動的チャネルのサブスクリプションを使用して、ショーケースのチャットの例からチャットの例を複製しようとしましたが、この方法では、クライアントはメッセージがオンになっているチャネルを取得できません(p:socket複数のチャネルを処理しますか?)。

次に、p:socketdataTableに挿入してみました。

<p:dataTable var="instrument"  … >
    <p:socket onMessage="handleMessage(#{instrument.id})" channel="/price" autoConnect="false" 
                                      widgetVar="subscriber_#{instrument.id}" /> 
    …
</p:dataTable>

およびサーバー側:

for (Instrument instrument : instruments) {
    RequestContext.getCurrentInstance().execute("subscriber_" +instrument.getId() + ".connect('/" + instrument.getId() + "')");
}

しかし、これはクライアントでエラーをスローします:

ReferenceError: subscriber_123 is not defined

他に方法はありますか?クライアント側でもサーバー側でもサブスクリプションの管理に問題はありません。唯一重要なことは、すべてのクライアントにすべての価格をプッシュしたくないということです。

PrimeFaces3.4.1の使用

4

1 に答える 1