1

Je tente d'implémenter un client websocket (avec libwebsockets en C et ce n'est pas une option). Par exemple, j'ai utilisé le test-client.c donné avec la bibliothèque. Mon websocket-client fonctionne correctement avec le test-server.c. Mais j'ai éprouvé quelques complications pour communiquer avec un serveur nginx.Comment communiquer entre un client libwebsockets et un serveur websocket comme Nginx?

Comme je comprends, le handshack ne se termine pas bien parce nginx ne sait pas sous-protocole de mon client websocket. Eh bien, il semble, comme dans test-client.c J'implémente mon propre sous-protocole (avec son propre nom, sa propre fonction de rappel).

Mes questions sont les suivantes:

  • Est-il possible de ne pas utiliser un sous-protocole WebSocket spécifique avec libwebsockets?

  • Sinon, suis-je censé mettre en œuvre un un (côté client) existant comme WAMP ou quelque chose dans ce list? (Je ne veux pas réinventer la roue ...)

  • Sinon, est-il existe un sous-protocole WebSocket « par défaut » que je peux indiquer à nginx et dans laquelle il pourrait être compatible avec mon websocket-client ? (je ne fais que certains envoient de simples/recevoir une action avec mon client. La mise en œuvre d'un client de libwebsockets semble complètement inutile si elle ne peut communiquer avec un serveur libwebsockets)

  • mes questions pertinentes? Si non pourquoi? Qu'est-ce que je rate ?

Toute aide est appréciée. Merci!

Répondre

0

Comme discuté avec Andy, le concepteur de libwebsockets (https://github.com/warmcat/libwebsockets/issues/834), la plus simple façon de rendre cela fonctionne est de ne pas nommé le sous-protocole dans la structure définissant du côté du client sous-protocole websocket:

/* list of supported sub-protocols and callbacks */ 
static struct lws_protocols ws_protocols[] = { 
     { NULL, ws_callback, 0, 128, }, 
     { NULL, NULL, 0, 0 } /* end */ 
}; 

Libwebsockets client n'essaie pas de négocier avec sec-websocket-protocol dans l'en-tête, la poignée de main fonctionne très bien avec nginx.