Jetzt möchte ich einen Chat machen, ohne socketio für meinen gesamten Server implementieren zu müssen.
Nein, Sie können es nicht so machen. Ihr Server hat buchstäblich keine Ahnung, wenn eine Ihrer Webseiten irgendwo versucht, sich mit Ihrem Chat-Server zu verbinden. Du musst die ganze Zeit zuhören.
Außerdem scheint es, dass Sie ein Missverständnis darüber haben, was es bedeutet, auf eingehende socket.io-Verbindungen zu hören, weil ein Listener-Server, der keine Verbindungen hat, nichts tut und Sie nichts kostet. Also, "die ganze Zeit laufen" bedeutet nichts. In der Tat würde es mehr kosten, den Server zu starten, den Server anzuhalten, später neu zu starten, usw., als ihn einfach zu belassen. Außerdem klingt deine Formulierung ", ohne socketio für meinen gesamten Server implementieren zu müssen" auch so, als ob du glaubst, dass es etwas Schwerwiegendes gibt, wenn du nur einen hooking.io Server hast. Das ist überhaupt kein schweres Konzept.
Darüber hinaus gibt es absolut keinen Nachteil, dass Ihr socket.io Server nur die ganze Zeit hört. Wenn Sie eine eingehende socket.io-Verbindung entweder über einen zuvor festgelegten Cookie oder mit einer anderen Authentifizierungsmethode authentifizieren möchten, können Sie eine Authentifizierung implementieren, sodass nur autorisierte Benutzer eine Verbindung herstellen können.
Ich verfolge nicht ganz, worüber Sie sprechen, mit waitChat und getChat. Die Idee hinter Chat ist, dass BenutzerA eine Nachricht senden kann, die an BenutzerB geliefert wird. Das Konzept dafür ist, dass userA eine Nachricht an den Server sendet und der Server diese dann an userB liefert.
Es ist offensichtlich einfach für BenutzerA, eine Nachricht an den Server zu senden. Das kann auf verschiedene Arten geschehen. Die Frage ist, wie der Server die Nachricht an userB liefert. Wie Sie wissen, kann der Server nicht einfach direkt mit UserB Kontakt aufnehmen. Die Art und Weise, dies zu tun, ist:
- userB regelmäßig Umfragen der Server für etwas Neues zu fragen
- userB verwendet „Lang-Abfrage“, die auch Polling ist, sondern eine spezielle Version, wo der Server auf die Abfrageanforderung hält für eine Weile und dann kehrt entweder zurück, wenn es einige Daten oder Zeiten gibt und dann muss der Client erneut abfragen
- userB macht eine dauerhafte webSocket oder socket.io Verbindung zum Server und dann kann der Server Daten über diese Verbindung an den Client senden Jederzeit.
Die webSocket oder Socket.Die Verbindung ist bei weitem die effizienteste, und tatsächlich wurde das gesamte Konzept erfunden und dem Browser hinzugefügt, weil die beiden Abfrage-Schemata nicht sehr effizient oder skalierbar sind.
im Grunde benötigen Sie eine Verbindung zwischen Client und Server, als Sie "etwas" benötigen, die Ihre Nachrichten an verbundene Clients "push/broadcast". Das "Etwas" ist "Socket" eine aktive Verbindung zwischen Client und Server. Was auch immer du im zweiten Teil gesagt hast, ist im Grunde deine Implementierung von "Socket", für das du bereits ein Framework 'socket.io' hast, also benutze es. – Vishrant
Okay, ich denke, ich werde socketio dafür verwenden, aber wie würde ich den Benutzernamen des Benutzers bekommen, wenn sie sich mit socketio verbinden? das Problem ist nicht ich mag Socket nicht, aber ich weiß nicht, wie ich meine aktuelle Express-Setup zu kombinieren, und es – anduyang
für jede Socket-Verbindung, es ist eine ID zugeordnet, und Sie müssen, welche Benutzer pflegen ist mit welcher ID verbunden. Es gibt viele Beispiele, Google Chat Beispiel in Express mit Socket io. – Vishrant