|
You last visited: Today at 04:15
Advertisement
Socket.io ohne Port verwenden?
Discussion on Socket.io ohne Port verwenden? within the Web Development forum part of the Coders Den category.
04/14/2017, 18:04
|
#1
|
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
|
Socket.io ohne Port verwenden?
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
|
#2
|
elite*gold: 666
Join Date: Apr 2011
Posts: 5,810
Received Thanks: 2,418
|
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
|
#3
|
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
|
Wenn ich socket.io auf Port 80 laufen lasse dann bekomme ich immer EADDRINUSE.
|
|
|
04/14/2017, 18:21
|
#4
|
elite*gold: 666
Join Date: Apr 2011
Posts: 5,810
Received Thanks: 2,418
|
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
|
#5
|
dotCom
elite*gold: 9842
Join Date: Mar 2009
Posts: 16,866
Received Thanks: 4,684
|
Mit einem reverse Proxy könntest du es machen
|
|
|
04/14/2017, 19:13
|
#6
|
elite*gold: 0
Join Date: Dec 2014
Posts: 276
Received Thanks: 84
|
Quote:
Originally Posted by Devsome
Mit einem reverse Proxy könntest du es machen
|
Okay.
Im Spoiler ist das aktuelle Setup:
Folgendes nutze ich momentan als reverseproxy:
PHP Code:
ProxyPreserveHost On ServerAlias www.webseite.de ProxyPass / http://www.webseite:3000/ ProxyPassReverse / http://www.webseite:3000/ ServerName localhost
Server.js ->
PHP Code:
var express = require('express') , http = require('http'); //make sure you keep this order var app = express(); var server = http.createServer(app); var io = require('socket.io').listen(server);
//... server.listen(3000,function(){ console.log('listening on *:3000'); }); app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); }); io.on('connection', function(socket){ console.log('a user connected'); }); var clients = 0;
io.on('connection', function(socket){ clients++; io.sockets.emit('broadcast',{ description: clients + ' clients connected!'}); socket.on('disconnect', function () { clients--; io.sockets.emit('broadcast',{ description: clients + ' clients connected!'}); }); }); io.on('connection', function(socket) {
socket.emit('welcome', { message: 'Welcome!', id: socket.id });
socket.on('i am client', console.log); });
Client ->
PHP Code:
var socket = io.connect( '/' );
$( "#chatForm" ).submit( function() { var nameVal = $( "#username" ).val(); var msg = $( "#chatmessage" ).val();
socket.emit( 'message', { name: nameVal, message: msg } );
return false; });
socket.on( 'message', function( data ) { var actualContent = $( "#messages" ).html(); var newMsgContent = '<li> <strong>' + data.name + '</strong> : ' + data.message + '</li>'; var content = newMsgContent + actualContent;
$( "#messages" ).html( content ); });
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:
PHP Code:
var socket = io();
$( "#chatForm" ).submit( function() { var nameVal = $( "#username" ).val(); var msg = $( "#chatmessage" ).val();
socket.emit( 'message', { name: nameVal, message: msg } );
return false; });
socket.on( 'message', function( data ) { var actualContent = $( "#messages" ).html(); var newMsgContent = '<li> <strong>' + data.name + '</strong> : ' + data.message + '</li>'; var content = newMsgContent + actualContent;
$( "#messages" ).html( content ); });
Server.js:
PHP Code:
var socket = require( 'socket.io' ); var express = require( 'express' ); var http = require( 'http' );
var app = express(); var server = http.createServer( app );
var io = socket.listen( server );
app.get('/', function(){ console.log("hi"); });
io.sockets.on( 'connection', function( client ) { console.log( "New client !" );
client.on( 'message', function( data ) { console.log( 'Message received ' + data.name + ":" + data.message );
io.sockets.emit( 'message', { name: data.name, message: data.message } ); }); });
server.listen(3000,function(){ console.log('listening on *:3000'); });
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
|
#7
|
elite*gold: 0
Join Date: Sep 2011
Posts: 195
Received Thanks: 65
|
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 )
|
|
|
 |
Similar Threads
|
Port/Socket Problem
01/18/2013 - CO2 Private Server - 3 Replies
I'm working on my private server and when i need to host it i am having the following issue:
-using local ip works smoothly no client errors,log-in on all servers using conquer loader or any other 5670+ patch loader(csv3config file for settings)
When i am using an external IP and try to connect to it from other place across internet with the portforwarding corrctly set up(Ports checked using most port checking tools they are open,as the website is up and accessible) i get the failed to...
|
Port/Socket Error
01/11/2012 - CO2 Private Server - 4 Replies
Alright, pretty sure this is the right place to post this.
I have decided to fool around with CO PServers as all I have ever coded and messed with is Java. I have touched a little bit into C# before but nothing major. But this is besides the point, actually I am fairly certain this has nothing to do with the coding of the server (oddly enough?).
Basically I have the ports 9958/5816 forwarded, added exceptions in firewall (inbound and outbound) and even tried cutting off the firewall, yet...
|
Wie 1-Hit Killer ohne einen Ordner packen verwenden?
03/24/2011 - Metin2 Private Server - 1 Replies
Wie 1-Hit Killer ohne einen Ordner packen verwenden?
English version of message ^^
How to use 1 hit killer pack without a folder?:handsdown:
|
Vista Home Basic Code bekommen.Wie verwenden ohne CD?
02/11/2011 - Main - 3 Replies
Frage gelöst,benötige keine Hilfe mehr.
|
Codes verwenden, ohne GM GM
11/28/2009 - Metin2 - 11 Replies
Zunächst entschuldigen Sie meine kleine Beherrschung der Sprache, würde Sekunden schätzen jemand legte einen Download-Link ein DLL als ich gelesen habe, mit dem Sie Codes ohne GM
|
All times are GMT +1. The time now is 04:15.
|
|