2012-04-09 26 views
1

「プッシュ通知機能」のレイヤーとしてsocket.ioとnodeを使用したいので、Apacheとノードの両方を実行しています。socket.ioを使用してメッセージを送信する方法

私は自分のサーバー上で、次のコード(ノード)

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!!!"); 
    }); 
}); 

を持っているページは、その後

8080ポートせずにローカルホストからのapacheで提供され、クライアント上で、私は次のコードを持っている:

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

と、ボタンがクリックされた:

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

ノードコンソールで何も表示されません...なぜですか?クロスドメインの問題?

更新:それはサファリ5.1.5とさえIE 9でうまく動作しますが、ないクロム(18.0.1025.151)またはFirefox(11.0)に ...私は何をしないのですか?ここ

は、ノードのログです:

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 

答えて

3

正常に動作する必要があります。つまり、自分のindex.htmlにあなたが持っていることを確認してください:

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

また、あなたがあなたのページを提供しているので、 Apache経由で、あなたは実際にノードファイル内にハンドラとhttpサーバを必要としません。 これはうまく動作するはずです:

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

との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> 

編集:これは、FirefoxとChromeの両方で動作します。

+0

返信いただきありがとうございます!明らかに私の問題はローカルですが、あなたの例はSafariとIEでは正常に動作しますが、私のChromeやFirefoxではうまくいきません。 PS:私はWebRTCを使いこなしていますので、この機能が私のクロムで有効になっています(「MediaStreamを有効にする」Macromedia、Windows、Linux、Chrome OS WebRTC機能のMediaStream、GetUserMedia、PeerConnection APIを有効にする。 ")、それを無効にしようとすると成功しなかった...他のアイデア? –

+0

試してみました。私はWindows 7上でノードを実行していますが、C:\ Users \ shlomis \ node_modules \ socket.ioのようにsocket.ioへのフルパスを使用しています( ) –

+0

これは奇妙なものです... FirefoxでChrome開発ツールやFirebugを開き、[ネット]タブを開くと、より多くの情報が得られる可能性がありますフードの下で起こっていることについて –

関連する問題