En construcción

Funciones de servidor

Este es un concepto de BO muy sencillo: es una función cuya ejecución ocurre en el servidor, pero se consume como si estuviera en el cliente. Por ejemplo:

class   {
//   rest
Suma (   ... numbers   )   {
return   numbers . reduce (   (   r ,   v   )   >   r   +   v   ) ;
}
 
//   public
async   Create ( )   {
const   result   =   await   Suma (   1 ,   2 ,   3   ) ;
 
console . log (   result   ) ;   //?   6
console . log (   await   Suma (   9 ,   8 ,   7 ,   6 ,   5   )   ) ;   //?   35
}
}

Como podemos ver en el ejemplo anterior, tenemos una función de servidor llamada Suma, que nos sumara todos los números que le enviemos y coloquemos en los parámetros. Para usar Suma del lado del cliente, solo tenemos que llamarla como una función pública cualquiera. Cabe mencionar que todas las funciones de servidor son asíncronas del lado del cliente, sin importar la forma en que se definan en la zona rest.

El canal o lugar donde se ejecuta una función de servidor dependerá de la zona, la zona rest y edge, van sobre el protocolo http(s), la zona socket va sobre el protocolo ws(s).

Nota. Para poder usar las funciones de servidor, necesitamos implementar en el front la librería protocol de BO.

Funciones de servidor, por socket

A diferencia de las funciones rest y edge, para poder usar una función de servidor que use el protocolo websocket, necesitamos agregar un paso más. El cual sería conectarse al socket antes de cualquier llamada a las funciones. lo que podemos hacer con una sola instrucción, que sería:

window . socket . Connect ( )

Otra función de la zona socket, es que aunque las funciones por protocolo websocket funcionan de forma similar a las funciones rest y edge. Tienen una peculiaridad extra, la cual es que estas funciones pueden ser ejecutadas mediante el disparo de eventos desde el cliente y de igual forma el servidor puede disparar eventos que se recibirán en el cliente. Con esto, podemos tener sistemas de comunicación bidireccional y completamente reactiva, por ejemplo:

class   {
//   socket
suma (   e ,   ... numbers   )   {
const   result   =   numbers . reduce (   (   r ,   v   )   >   r   +   v   ) ;
 
this . Trigger (   ' respuesta ' ,   result   ) ;
 
//   o   en   caso   de   que   necesitemos   que   todos  
//   los   clientes   conectados   reciban   el  
//   resultado
this . all_sockets . Trigger (   ' respuesta ' ,   result   ) ;
}
 
//   public
async   Create ( )   {
await   socket . Connect ( ) ;
 
document . body . Events (   this ,   ' respuesta ' ,   onRespuesta   ) ;
this . Trigger (   ' suma ' ,   1 ,   2 ,   3   ) ;
this . Trigger (   ' suma ' ,   9 ,   8 ,   7 ,   6 ,   5   ) ;
}
 
//   private
onRespuesta (   e ,   respuesta   )   {
console . log (   respuesta   ) ;
}
}

En este ejemplo:

  • Nos conectamos al socket al crear el componente, en la función create.
  • Igualmente vemos como agregamos un observador al evento respuesta, en el body de nuestro documento, con esto haremos que cada vez que se presente el evento respuesta en el DOM, se ejecute la función privada onRespuesta.
  • Inmediatamente disparamos dos eventos llamados suma (el evento es el nombre de la función), pasándole los valores que necesitamos entregar al servidor.
  • Ahora en el servidor: Se recibe el evento (ejecutando la función correspondiente), y se procesa la información enviada por el cliente.
  • Y en una primera instancia, mostramos como disparamos el evento respuesta, en el cliente, pasándole el resultado de nuestro proceso.
  • Luego, mostramos cómo podríamos disparar el mismo evento, a todos los clientes conectados a este servidor (en caso de que necesitemos esto).
  • Devuelta al cliente...