2012-04-09 12 views
1

Ich möchte Socket.io und Knoten als Layer für meine "Push-Benachrichtigung Feature" verwenden, so dass ich sowohl Apache und Knoten ausführen.Wie sende ich Nachrichten mit socket.io

Ich habe den folgenden Code auf meinem Server (Knoten)

var app = require('http').createServer(handler) 
    , io = require('C:/path/to/file/socket.io').listen(app) 
    , fs = require('fs'); 

app.listen(8080); 

function handler(req, res) { 
    console.log(req); 
    fs.readFile('C:/path/to/file/index.html', 
     function (err, data) { 
      if (err) { 
       console.log(err); 
       res.writeHead(500); 
       return res.end('Error loading index.html'); 
      } 

      res.writeHead(200); 
      res.end(data); 
     }); 
} 

io.sockets.on('connection', function (socket) { 
    socket.on('my event', function (msg) { 
     console.log("DATA!!!"); 
    }); 
}); 

die Seite dann von Apache von localhost ohne Port 8080

und auf dem Client Ich habe den folgenden Code serviert:

var socket = io.connect('http://localhost:8080'); 

und wenn eine Schaltfläche geklickt wird:

socket.emit('my event', {data:"some data"}); 

Ich sehe nichts auf der Node-Konsole ... warum ist das? Übergreifendes Problem?

Update: es auf Safari 5.1.5 funktioniert gut und sogar IE 9, aber nicht auf Chrom (18.0.1025.151) oder Firefox (11,0) ... Was bin ich dabei?

hier ist der Knoten Protokoll:

info - socket.io started 
    debug - served static content /socket.io.js 
    debug - client authorized 
    info - handshake authorized 4944162402088095824 
    debug - setting request GET /socket.io/1/websocket/4944162402088095824 
    debug - set heartbeat interval for client 4944162402088095824 
    debug - client authorized for 
    debug - websocket writing 1:: 
    debug - setting request GET /socket.io/1/xhr-polling/4944162402088095824?t=13 
33977095905 
    debug - setting poll timeout 
    debug - discarding transport 
    debug - cleared heartbeat interval for client 4944162402088095824 

Antwort

3

Das gut funktionieren sollte, nur sicherstellen, dass Sie in Ihrer index.html haben:

<script src="http://localhost:8080/socket.io/socket.io.js"></script> 

auch, da Sie Ihre Seite sind dient über Apache benötigen Sie den Handler und den http-Server in Ihrer Knotendatei nicht. dies sollte gut funktionieren:

var io = require('socket.io').listen(8080); 
io.sockets.on('connection', function (socket) { 
    socket.on('my event', function (msg) { 
     console.log("DATA!!!"); 
    }); 
}); 

und für die index.html:

<!DOCTYPE html> 
<html lang="en"> 

    <head> 
     <title>Hello World!</title> 
     <meta charset="utf-8"> 

     <script src="http://localhost:8080/socket.io/socket.io.js"></script> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
     <script type="text/javascript"> 
      $(document).ready(function(){ 
       var socket = io.connect('http://localhost:8080'); 
       $("#button").click(function() { 
        socket.emit('my event' ,"Hello World!"); 
       }) 
      }) 
     </script> 
    </head> 

    <body> 
     <button type="button" id='button'>Send Message</button> 
    </body> 

</html> 

Edit: Das in Firefox und Chrome funktioniert.

+0

Danke für die Antwort! Offensichtlich ist mein Problem lokal, Ihr Beispiel funktioniert gut auf Safari und IE, aber nicht auf meinem Chrome oder Firefox ... wo soll ich hinschauen? PS: Ich bin mit WebRTC rum, so dass diese Funktion auf meinem Chrom aktiviert ist ("Enable MediaStream. Mac, Windows, Linux, Chrome OS MediaStream aktivieren, GetUserMedia und PeerConnection APIs für WebRTC-Funktionalität. Weitere Informationen auf webrtc.org . ") versuchte, es ohne Erfolg zu deaktivieren ... irgendeine andere Idee? –

+0

versuchte Chrome neu zu installieren ... nein gehen :( Weitere Informationen: Ich bin Knoten auf Windows 7 ausgeführt, und ich verwende den vollständigen Pfad zu socket.io wie folgt "C: \ Users \ shlomis \ node_modules \ socket.io "(Konnte es nicht herausfinden) ... könnte das zusammenhängen? –

+0

Das ist seltsam ... versuchen Sie, Chrome-Entwickler-Tools oder Firebug auf Firefox zu öffnen, und öffnen Sie die Registerkarte" net ", könnte es Ihnen mehr Informationen geben über was passiert unter der Haube –

Verwandte Themen