Socket.io ohne Port verwenden?

04/14/2017 18:04 .Barone#1
Heyh Epvp'ler.

Ich würde gerne Socketio auf meiner Seite nutzen.

Nun, nach dem einrichten ist mir halt aufgefallen das es nur möglich ist wenn ich in dem Browser den port mit angebe. zb: mysite.de:3000

Ich habe gelesen das man dies durch nen ReverseProxy ändern kann.
Ich habe nun den ReverseProxy eingestellt und es funktioniert auch, die index.html datei die ich in der index.js angegeben habe wird auch geladen.

Ich frage mich gerade wie ich zb hingehen könnte und nen Chat mit Socketio schreiben kann, so das dieser auf der index.html in einem kleinen Kasten eingebunden wird.

Bin ich gerade zu doof um auf ne einfache Lösung dafür zu kommen?

Gruß
04/14/2017 18:12 Syc#2
Du kannst socket.io bestimmt auf Port 80 (oder 443 für https) laufen lassen. Dann kannst du den Port weglassen.
04/14/2017 18:18 .Barone#3
Wenn ich socket.io auf Port 80 laufen lasse dann bekomme ich immer EADDRINUSE.
04/14/2017 18:21 Syc#4
Du musst halt schauen, dass sonst keine Anwendung auf Port 80 listened.

Es kann auch manchmal sein, dass sich node aufhängt und den Port weiterhin reserviert, dann musst du einfach mal den Nodeprozess komplett beenden.
04/14/2017 18:24 Devsome#5
Mit einem reverse Proxy könntest du es machen
04/14/2017 19:13 .Barone#6
Quote:
Originally Posted by Devsome View Post
Mit einem reverse Proxy könntest du es machen
Okay.

Im Spoiler ist das aktuelle Setup:

Ich binde die Client.js in die index.html ein und nutze über den server node server.js -> alles ok
Wenn ich dann auf die Seite gehe, kommt einfach nen Error:
Cannot Get /
Weiß jemand eventuell woran das genau liegt?

Edit:
Reverse Proxy: wie oben
app.js:

Server.js:

Bekomme den error:
Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /.

Reason: Error reading from remote server
06/04/2017 13:15 iSynaptic#7
Du brauchst keinen Reverse Proxy - Warum auch?
Sockets nutzt man ja in der Regel um die Seite Live zu halten und Informationen nur dann zu bekommen, wenn es neue gibt ( Anders als bei Ajax / Long Polling ).

Dein Socket willst du ja auf deiner Seite einbinden, wie ich es sehe, also ist es natürlich von Nöten, eine normale Website über den Port 80 auszuliefern.
Socket.Io wird Clientseitig via JS realisiert und auf deiner Seite ausgeliefert.
Welchen Port du für Socket.Io nutzt ist irrelevant.

Das der Port 80 nicht funktioniert ist klar - Auf diesem Port läuft ja dein Webserver.
Wenn du das Socket.Io Client JS auf deiner Seite unter Port 80 einbindest, musst du keinen Port mitgeben. Im Socket.Io Script steht zum Beispiel der Port 5000 - Dein Socketlistener muss dementsprechend auf dem Remote Server auch auf Port 5000 lauschen. Die Webseite jedoch wird ganz normal unter Port 80 aufgerufen.

DeineSeite.de:80 -> Webserver -> JS -> DeinSocket:5000 -> Socket Listener

Zu glauben du müsstest mit einem Webrequest dein Socket ansprechen ist falsch. Das Funktioniert auch gar nicht, weil dein SocketListener mit den Webrequests gar nichts anfangen kann.

Für einen reinen Chat auf deiner Webseite würde übrigens Longpolling ausreichen. Sockets sind für ganz andere Kaliber gedacht ( Webgames / Gamble Seiten, ect )