Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

Bloque de código
@Push
private PushContext someChannel;

public void sendMessage(Object message, Group recipientGroup) {
    Collection<Long> recipientUserIds = recipientGroup.getUserIds();
    someChannel.send(message, recipientUserIds);
}


Consejos

...

para el Diseño de Canales

Se pueden declarar varios canales push con diferentes ámbitos con o sin especificar usuarios de la aplicación. Incluso el mismo nombre de canal se puede reutilizar entre varias vistas, incluso si su ámbito es de vista. Es más eficiente utilizar el menor número de nombres de canal y ligar el nombre del canal de la conexión push, a combinaciones especificas de ámbito/usuario y no para vistas Faces especificas. En caso de tener varios canales de ámbito vista para diferentes propósitos, lo mejor es tener un único canal de ámbito vista y tener una listener Javascript global que pueda distinguir los tareas de los diferentes mensajes enviados. Por ejemplo, enviando el mensaje al servidor como se muestra a continuación:

Bloque de código
Map<String, Object> message = new HashMap<>();
message.put("functionName", "someFunction");
message.put("functionData", functionData); // Can be Map or Bean.
someChannel.send(message);

que es procesado por el listener Javascript onmessage como se indica a continuación:

Bloque de código
function someSocketListener(message) {
    window[message.functionName](message.functionData);
}

function someFunction(data) {
    // ...
}

function otherFunction(data) {
    // ...
}

// ...


Control de Conexiones

Se puede usar el atributo opcional connected para controlar cuando se auto-conecta o no, la conexión web. Acepta valores booleanos que pueden obtenerse mediante expresiones EL

Bloque de código
<fw:socket channel="someChannel" ... connected="#{bean.pushable}" />


El valor por defecto es true. Si el valor del atributo connected o rendered es una expresión EL, y se vuelve a false durante una solicitud AJAX, entonces cualquier conexión push abierta se cerrará explícitamente al acabar la petición AJAX, incluso aunque no haya actualizado el componente <fw:socket> en la petición AJAX. Hay  que asegurarse de que el valor esta ligado al menos a una propiedad de la vista en caso de querer controlarlo durante el ámbito de la vista.


Se puede establecer el valor del atributo connected directamente a false y controlar manualmente la apertura de la conexión push en la parte cliente invocando con Javascript a FundeWeb.Push.open(channel), pasando el nombre del canal como parámetro, Por ejemplo, cuando se lance el listener onclick de un botón que inicia una ejecución de una tarea asíncrona de larga duración en la parte servidor. Es realmente útil, para conexiones de ámbito vista, que no necesitan realizar una carga en página de manera inmediata.

Bloque de código
<p:commandButton ... onclick="OmniFaces.Push.open('foo')">
    <p:ajax ... />
</p:commandButton>
<fw:socket channel="foo" scope="view" ... connected="false" />

 

...

ssss