2016-06-26 10 views
0

Ich habe derzeit ein Projekt, in dem ich ein webbasiertes Brettspiel mit nodejs und socket.io entwickeln muss. Die Sache ist, ich bin direkt von Android Entwicklung zu Web Dev gesprungen und so habe ich einige Probleme Konzepte zu verstehen.Was ist eigentlich das "Socket" -Objekt in socket.io? Wie stelle ich sicher, dass die Verwendung optimal ist?

Ich habe bereits Code implementiert, wo der Client eine Verbindung zum Server herstellt (app.js), Nachrichten sendet, Nachrichten empfängt usw. Ich habe auch ein kleines Chat-Fenster hinzugefügt, damit die Spieler chatten können. Es funktioniert. Ich hatte eine ungefähre Vorstellung davon, wie man Nachrichten ausstrahlt und Raumutensilien mitmacht.

Die Sache ist, ich bin mir nicht sicher, wie man das socket Objekt, das Server empfängt, wenn ein Benutzer verbindet, gut ausnutzt. Sollte ich das socket Objekt irgendwo für zukünftige Verwendung speichern? Oder ich füge einfach Benutzer zu Räumen hinzu, so dass das Senden von Nachrichten an einen einzelnen Benutzer möglich ist und es nicht wichtig ist, den Socket in einer Variablen zu speichern? Was sind die Chancen, dass ich das Objekt socket in der zukünftigen Entwicklung dieses Projekts wieder für bestimmte Dinge verwenden muss? Ich habe das Socket-Objekt in der Konsole ausgegeben, um zu sehen, welche Informationen es enthielt, aber das war zu viel für mich, um es zu verstehen.

+0

Dies bezieht sich nicht wirklich auf (untere) Sockets in der Art, wie [Tag: Socket] bedeutet. In "socket.io" ist das "socket" -Objekt nur ein Name (ein verwirrender Name) für eine Client-Kanal-Abstraktion, die das Websocket-Protokoll, AJAX, XHR long polling oder andere Kommunikationstechniken verwenden könnte. Bitte entfernen Sie das Etikett. Was Ihre Frage betrifft: Sie können Ihren Code jederzeit aktualisieren, um diesen Wert zu einem späteren Zeitpunkt zu speichern und zu löschen, falls Sie ihn benötigen. – Myst

Antwort

2

In socket.io ist das Socket-Objekt ein Javascript-Objekt, mit dem socket.io den Status eines bestimmten Sockets verfolgen kann. Es verfügt über Methoden und Eigenschaften, die Sie für einige Zwecke verwenden können, und um diese zu verwenden, müssten Sie einen Verweis auf das gewünschte Socket-Objekt erhalten.

Sie müssen das Socket-Objekt jedoch nicht unbedingt selbst speichern, da die socket.io-Serverinfrastruktur alle von ihnen speichert und in einer organisierten Struktur verwaltet, in der Sie sie jederzeit in Zukunft finden können oder müssen.

Es ist auch üblich Buchse Referenzen in einem Verschluss zu halten, die es Ihnen ermöglichen, Nachrichten zu empfangen und an die Buchse, die diese Nachricht als in dieser Art der Regelung reagieren senden:

io.on('connection', function(socket){ 
    socket.on('getDataX', function(requestArgs) { 
     // process the getDataX request 

     // send response to that same socket 
     socket.emit('replyDataX', ....); 
    }); 
}); 

Oder Sie können ausgestrahlt alle Buchsen mit:

io.emit('update', ...); 

Sie können auf verschiedene Arten auf die Liste der von socket.io gespeicherten verbundenen Sockets zugreifen. Zum Beispiel:

io.sockets.connected 

ist ein Objekt, in dem die Eigenschaften sind Socket-IDs und die Werte der Socket-Objekte so ein ein Socket-Objekt finden können, wenn eine ID gegeben oder können alle angeschlossenen Steckdosen laufen.

Sie können dem Socket-Objekt auch eigene Eigenschaften hinzufügen. Einige Chat-Systeme fügen dem Socket-Objekt einen Benutzernamen hinzu, so dass Sie eine bestimmte Verwendung anhand ihres Benutzernamens identifizieren oder finden können.

+0

Gibt es eine Zeit, in der der Server einen perkutanen Socket aus seinem Set entfernt? Wie wenn ein Client das Fenster schließt? –

+0

@SrujanBarai - Wenn ein Client die Verbindung trennt, entfernt socket.io den Socket aus seinen Daten. – jfriend00

+0

Ist es also möglich, den Client die Seite aktualisieren zu lassen, ohne seine Identität auf dem Server zu verlieren? –