2012-04-07 12 views
2

私はApacheとSocket.IOが稼働しているサーバーを持っています。私は私のウェブサイトでsocket.ioを使ってメッセージを送受信しようとしています。Socket.IO Websocket FirefoxとChromeでメッセージが送信されない

これは私のサーバーのコードです:

var fs = require('fs'); 
var hskey = fs.readFileSync('file.key'); 
var hscert = fs.readFileSync('file.crt'); 

var options = { 
    key: hskey, 
    cert: hscert 
}; 

var app = require('https').createServer(options); 
var io = require('/usr/local/lib/node_modules/socket.io').listen(app); 

app.listen(8181); 

io.sockets.on('connection', function (socket) { 
    socket.emit('serverMessage', 'Bienvenue master!'); 
socket.broadcast.emit('serverMessage', 'New user online'); 
}); 

そして、これはWebページである:

<!doctype html> 
<html> 
    <head> 
    <title>Socket.io Test</title> 
    <script src="./socket.io.js"></script> 
    </head> 
    <body> 

    <script> 

    var socket; 
    var firstconnect = true; 

    function connect() { 
     if(firstconnect) { 
     socket = io.connect('https://secure.mysite.com:8181'); 

     socket.on('serverMessage', function(data){ message(data); }); 
     socket.on('connect', function(){ status_update("Connected to Server"); }); 
     socket.on('disconnect', function(){ status_update("Disconnected from Server"); }); 
     socket.on('reconnect', function(){ status_update("Reconnected to Server"); }); 
     socket.on('reconnecting', function(nextRetry){ status_update("Reconnecting in " 
      + nextRetry + " seconds"); }); 
     socket.on('reconnect_failed', function(){ message("Reconnect Failed"); }); 

     firstconnect = false; 
     } 
     else { 
     socket.socket.reconnect(); 
     } 
    } 

    function disconnect() { 
     socket.disconnect(); 
    } 

    function message(data) { 
     document.getElementById('message').innerHTML += "<br>" + "Server says: " + data; 
    } 

    function status_update(txt){ 
     document.getElementById('status').innerHTML = txt; 
    } 

    function esc(msg){ 
     return msg.replace(/</g, '&lt;').replace(/>/g, '&gt;'); 
    } 

    function send() { 
     socket.send('clientMessage', 'world');  
    };   

    </script> 

    <h1>Socket.io Test</h1> 
    <div><p id="status">Waiting for input</p></div> 
    <div><p id="message"></p></div> 
    <button id="connect" onClick='connect()'/>Connect</button> 
    <button id="disconnect" onClick='disconnect()'>Disconnect</button> 
    <button id="send" onClick='send()'/>Send Message</button> 
    </body> 
</html> 

すべてがサファリ(のWebSocket)とオペラ(JSONプーリング)の下ではなくて正常に動作するようですFirefoxとChrome(websocket)クライアントからサーバーにメッセージを送信できません。それ以外のものはすべて動作しており、ハンドシェイク、接続、サーバーメッセージの取得が可能です。私は研究をたくさんしましたが、私がこの問題の唯一の人だと思われます。

私を助けてくれてありがとう!

+0

Websocketの「ブラウザの互換性」をご覧ください。 https://developer.mozilla.org/en/WebSockets –

+0

Chromeには標準のWebkitとは異なるWebソケット実装があるかもしれません。 –

+0

websocket用にsocket.ioを使用していますが、これはflashsocketと長いプーリングをサポートしているので動作しますが、メッセージは送信されません。 – exomic

答えて

1

私は問題を見つけました。私は、サーバー側のsocket.io.jsとは別のバージョンを使用していました。

+0

あなたはそれを確認する方法を教えてもらえますか?私も同じ問題に直面しています。 – Shekhar

1

socket.ioモジュールを接続すると、socket.ioルートが傍受されます。

「https://secure.mysite.com:8181/socket.io」をリクエストすると、 「ようこそsocket.io」と返信されます。

したがって、クライアントサイドのsocket.io.jsをリクエストすると、socket.ioモジュールから直接取り込まれます。 "https://secure.mysite.com:8181/socket.io/socket.io.js"

クライアントサイドライブラリを変更したくない場合は、変更されたコピーを作成し、ファイルをアップアップしますが、socketioをnpmで更新すると、修正されたコピーも手動でバンプする必要があります。

関連する問題