2014-04-25 1 views
1

Je souhaite créer une application Web dans laquelle un groupe d'utilisateurs peut recevoir des données de manière asynchrone chaque fois que le backend C++ a quelque chose de nouveau. Donc, idéalement, lorsqu'un nouvel utilisateur vient, il sera ajouté à la liste des abonnés et chaque fois que le backend C++ aura de nouvelles données pour le groupe, il le publiera à tout le monde.Est-ce que libwebsockets offre publier/s'abonner?

libwebsockets semble être une bonne bibliothèque à utiliser avec C++. Le seul problème est qu'il semble que c'est principalement conçu sur un système de rappel, donc, apparemment, les données ne sont destinées à être envoyées que si le client le demande.

Je trouve ce post avec un problème similaire, mais je ne sais pas si c'est la meilleure façon de le faire: How do I send async data via libwebsocket?

Toute aide sera appréciée. Merci.

Répondre

1

a trouvé! Libwebsockets permet de diffuser à tous les utilisateurs connectés un protocole spécifique en utilisant libwebsocket_callback_on_writable_all_protocol(*protocol) qui déclenche LWS_CALLBACK_SERVER_WRITEABLE qui sera géré par la fonction de rappel du protocole et c'est là que nous pourrions envoyer les données.

Donc, en général, j'utiliser mon second protocole (le non-http un) chaque fois que j'ai des données diffusées dans une partie de mon code avec libwebsocket_callback_on_writable_all_protocol(protocols + 1) et dans la fonction de rappel du protocole

static int callback_linux_shell(struct libwebsocket_context * context, struct libwebsocket *wsi, enum libwebsocket_callback_reasons reason, void *user, void *in, size_t len) { 
    switch (reason) { 
    ... 
     case LWS_CALLBACK_SERVER_WRITEABLE: 
      libwebsocket_write(wsi, my_data, my_data_size, LWS_WRITE_TEXT); 
      break; 
    ... 
    } 
} 
Questions connexes