2016-03-29 18 views
0

Ich bin ziemlich neu bei Node.js. Ich verwende socket.io, um eine Echtzeit-Feed-Anwendung aufzubauen.Socket.io Server hört Verbindungsereignis nicht

ich verwende http://socket.io/get-started/chat/, um mit meiner Anwendung zu beginnen. in Kombination mit ausdrücklicher

Es folgt mein Servercode

/** 
* Module dependencies. 
*/ 
var express = require('express'); 
var logger = require('morgan'); 
var routes = require('./routes'); 
var app = express(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

// log requests 
app.use(logger('dev')); 
app.use('/rest', routes.userInfo, routes.matchList, routes.teamList, 
     routes.completedMatchList); 

io.on('connection', function(socket){ 
     console.log('a user connected'); 
    }); 

app.listen(3006); 

console.log('listening on port 3006'); 

Dann habe ich eine index.html in meinem Web-Ordner meiner Anwendung haben.

Ich bin einfach nur Code mit dem Client-Socket, wie unten

<script src="/node_modules/socket.io/node_modules/socket.io-client/socket.io.js"></script>  
<script> 
    var socket = io(); 
</script> 

Ich begann meinen Server intitalize und seiner Arbeit gut Aber auch nach der Client-Seite geladen und serviert wird, ist Verbindungsereignis nicht zugehört und Der Code druckt nicht in der Konsole "Benutzer ist verbunden".

nur ein wenig hinzuzufügen, verwende ich eine Anwendung Router in der Mitte, die am Hafen beginnt 5000.

i in der Chromkonsole aktiviert, wird es immer wieder Fehler wie

http://localhost:5000/socket.io/?EIO=3&transport=polling&t=LF2viiR

Berichterstattung http://localhost:5000/socket.io/?EIO=3&transport=polling&t=LF2vj0v

Snapshot meine Chromkonsole mit Fehlern enter image description here

prost,

Saurav

+0

Geist Aktualisierung mit den Fehlern, die Sie von der Chrom-Konsole bekommen? Da diese URLs localhost sind, gibt es keine Möglichkeit, sie anzuzeigen. – ckross01

+0

@ ckross01 Danke für Ihre Antwort ... aktualisiert mit einem Snapshot meiner Chrom-Konsole ... – saurav

+0

sieht aus wie Ihr Front-End-Code erwartet Port 5000, aber Ihr Express-Server hört für 3006 – ckross01

Antwort

0

In diesem Fall, dass Sie nicht app.listen() verwenden können, denn dann bist du nicht mit dem HTTP Beispiel hören, dass Socket.io verwendet.

Sie übergeben Ihre Expressinstanz app an Ihre HTTP Instanz http, wenn sie erstellt wird. Somit wird app als Basis für http verwendet. Dann übergeben Sie http an socket.io beim Erstellen io.

var app = express(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

Was Sie tun müssen, ist da, dass mit Ihren http Variable zu hören ist der Server, den Sie io mit sind Instanziierung. Ändern Sie Ihre app.listen() zu http.listen().

+0

thans für Ihre Eingaben ... tat das, aber nicht seine geben die gleichen Ergebnisse – saurav

+0

@saurav was "nicht seine gibt die gleichen Ergebnisse " bedeuten? Welche Art von Ergebnissen erhalten Sie dabei? – peteb

+0

Ich meine, es gibt die gleichen Ergebnisse wie in Chrome Reporting 404 Fehler, wenn socket.io versucht abzufragen und Server nicht auf Verbindungsereignisse reagieren – saurav

0

Bei der ersten Installation Steckdose.io von npm npm install socket.io --save,

Knoten Program (Backend):

Statt:

app.listen(3006); 

Wechsel in:

http.listen(port, function(err) { 
    if (err) { 
     console.log(err); 
    } else { 
     console.log("Listening on port 8080"); 
    } 
}); 

Frontend:

Wenn Ihr Knoten Programm und das Frontend-Programm laufen auf demselben Port in localhost dann,

<script src="/socket.io/socket.io.js"></script>  
<script> 
    var socket = io(); 
</script> 

Und Node-Programm und Frontend-Programm in zwei verschiedenen Port ausgeführt.

<script src="http://localhost:5000/"></script> 

<script> 
    var socket = io("http://localhost:5000/socket.io/socket.io.js"); 
</script> 

Ich hoffe, es wird funktionieren, wenn das Knotenprogramm in Ordnung ist.