cette question a à voir avec la théorie comme avec la programmation de la vie réelle je l'ai d'abord demandé (cs.stackexchange.com) parce que c'est la théorie la plus et j'ai eu l'instruction de demander ici (https://cs.stackexchange.com/questions/81472/question-about-implementing-websockets-theory-and-the-reality-in-php). J'expérimente avec des sockets Web et PHP depuis de nombreuses années (une partie de ce code est déjà en production), d'abord j'ai créé à partir de zéro un serveur WebSocket (WS) avec IO non bloquant et tout a bien fonctionné, sauf dans la vraie vie les autres méthodes requises par l'application ne peuvent pas être non bloquantes (par exemple, connexion à une base de données et une requête). Ensuite, j'ai introduit la programmation asynchrone, ce qui signifie que le serveur WS a initié diverses requêtes PHP au serveur et qu'il vérifie chaque boucle si ces requêtes ont fini les résultats afin de les envoyer au client. Cela a bien fonctionné pour quelques utilisateurs côté client connectés à ce serveur WS, le nombre avait à voir avec ce que l'opération était mais il ne serait pas plus de 30 ou 50. Parce que si vous utilisez un seul thread et vous avez beaucoup de simultanée demandes que vous devez vérifier chacun d'eux séquentielle s'il y a un résultat fini. L'étape suivante consistait à analyser le code des approches populaires prétendant pouvoir stocker et traiter de nombreux clients (certains disent 10 000) en même temps. Peut-être qu'ils savaient quelque chose que je n'ai pas (Ma question n'est pas s'ils mentent, la question est de savoir s'il y a quelque chose que je suis absent (ou peut-être que je me trompe) ici). Les résultats étaient frustrants. La plupart d'entre eux n'utilisent pas async par défaut pour vous conseiller de ne pas utiliser de méthodes de blocage (ce qui est vraiment impossible dans la vraie vie), mais même si vous leur mettez des modules pour les async le même problème. La question n'est pas quelle est la solution, car j'ai implémenté PHP pthreads et je pouvais le faire fonctionner, mais sans réel bénéfice (par exemple partager des objets, il fallait sérialiser tout désérialiser), j'écris des extensions PHP C++ années maintenant, donc je travaille dans une extension PHP qui le fera efficacement.Implémentation WebSockets, la théorie et la réalité en PHP
La question est ici, ai-je oublié quelque chose? Comment peuvent-ils prétendre que le bidon peut traiter une grande quantité de demande simultanément alors même avec la programmation asynchrone ils doivent vérifier chaque demande dans la boucle qui a fini?
Merci d'avance pour toute nouvelle connaissance ou direction de recherche que votre réponse pourrait me conduire.
Ne pas Je veux dire quelque chose de stupide mais j'ai toujours eu l'impression que les discussions ** sont ** la solution. Vous avez juste besoin de trouver une manière décente de partager la mémoire entre les threads (pas très expérimenté avec pthread mais les bibliothèques de threads C n'ont jamais eu de problème avec le passage des objets en supposant que vous saviez détecter les sections critiques et ajouter des verrous). – apokryfos
apokryfos c'est ce que je fais maintenant, je crée ceci comme une extension PHP en C++ (nous ne partageons pas d'objets car cela signifierait un verrouillage/déverrouillage du côté PHP, ce que nous faisons, c'est que plusieurs objets sérialisés sont partagés à cette requête et après la requête on compare cet objet avec le principal de ce contexte). Le noyau de PHP n'est pas une aventure de programmation joyeuse et si je manque juste quelque chose ici et les réclamations employant juste async et un serveur d'E/S non bloquant de WS ont n'importe quelle signification (ou vérité) que je voudrais le savoir. C'est ce que je demande, ai-je raison ou est-ce que quelque chose me manque? – jkon