2016-07-29 15 views
0

Server-Side-Code:socket.io Verwirrung mit Express.js

var server = require("http").Server(express); 
var io = require("socket.io")(server); 
server.listen(5000); 

io.on('connection', function(client) { 

    client.on('order', function(data) { 
     io.emit('place_order',data); 
    }); 
}); 

cilent Seitencode

var socket = io.connect('http://localhost:5000'); 
socket.on('place_order', function (data) {alert('data.x')}) 

Irgendwo in Github ich git clone ein Projekt und ich sah über etwas. Die 3. Zeile des Server-Side-Codes hat mich verwirrt. Warum hat der Autor hier einen extra Port erstellt? ist es nicht ok, die 3. Zeile zu verwerfen und auf der Cilent-Seite nur mit dem Pfad ohne Port wie verbinden? Brauchen Sie Erklärung für socket.io Experte hier, ich bin verwirrt.

btw dieser Code funktioniert ..

+0

Die dritte Codezeile deklarieren, weil node.js oft nicht auf Port laufen 80. Ex: Bei [link] (https://nodejs.org/en/about/) es zeigt Port 3000. – tuananh

+0

@tuananh die 3. Zeile erstellt einen anderen Server 5000 für Socket und die Express-App läuft 3000. Ist das notwendig? –

Antwort

0

Why the author created extra port here?

Sie haben Ihren Server auf irgendeinem Port zu starten, und server.listen(nnn) ist eine Möglichkeit, das zu tun. Wenn Sie Ihren Server nicht starten, wird er nicht ausgeführt und Sie können sich nie mit ihm verbinden.

Server müssen erstellt und dann an einem bestimmten Port gestartet werden.

In Ihrem speziellen Code Beispiel haben Sie Ihren Server auf Port 5000 statt dem gemeinsam Port 80.

isn't it ok to discard the 3rd line

Nr Ohne es zu Ihrem Server ausgeführt wird, nicht ausgeführt werden gewählt.


Wenn Ihr Server auf Port 80 gestartet wird, dann haben Sie keine Portnummer in der URL zur Liste da, dass die Standard-Portnummer für eine http:// Verbindung ist.

+0

sehen Sie sich diese Seite an, https://mliu95.github.io/2014/07/13/Creating-an-online-multiplayer-web-game-using-Socketio-und-Quintus-Part1/ über die 'Einrichtung unserer Webserver-Teil. –

+0

@ThianKianPhin - Und schau was auf dieser Seite? Es hat eine Zeile 'server.listen (80); 'um den Server zu starten. Sie wählten Port 80 in diesem Beispiel. Sie können die Portnummer für Ihren Webserver auswählen. Der Client muss sich natürlich auf die von Ihnen gewählte Portnummer verbinden. – jfriend00

0

Nachdem Sie Ihren socket.io an einen HTTP-Server angeschlossen haben, muss er gestartet werden. So funktioniert Socket. Das ist was die 3. Zeile tut. Wenn Sie es entfernen, bedeutet das, dass Sie den Server nicht selbst starten, und das würde natürlich nicht funktionieren.

Der Port ist bei 5000, was für Sie unkonventionell aussehen könnte, aber dies ist eine Standard-Praxis, um Fehler zu vermeiden, wenn die PORT 80 verwendet wird, wie es oft von anderen Web/Internet-basierten Anwendungen/Servern ist. Aber, wenn das nicht der Fall ist, fühlen sich frei, um den Port zu 80 ändern, indem Sie die 3. Zeile als server.listen(80); ersetzt

Für Ref:, wenn Sie den Fehler: Error: listen EADDRINUSE :::80 dann direkt verstehen, dass die Port nicht frei !!

+0

aber es ist Express, es läuft standardmäßig auf 3000, warum nicht den gleichen Port für socket.io auch verwenden? –

+0

Ich bin nicht bewusst, dass 3000 der Standardport von Express ist. Aber, wenn 3000 frei ist, warum nicht benutzen, wenn du magst? – Iceman

0

Das ist kein Problem von socket.io. In einer Node.js-Anwendung müssen Sie angeben, welchen Port Node.js ausführen soll.

Node.js ist ein Platform und in der ersten Zeile erstellen Sie einen Server und dafür müssen Sie den Port setzen, den Ihr Server ausführt.

https://nodejs.org/dist/latest-v6.x/docs/api/http.html#http_http