1

「プッシュ通知機能」のレイヤーとしてsocket.ioとnodeを使用したいので、apacheとnodeの両方を実行しています。

サーバー(ノード)に次のコードがあります

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

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

更新: safari5.1.5およびIE9でも問題なく動作しますが、chrome(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
4

1 に答える 1

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 の両方で機能します。

于 2012-04-09T13:29:36.967 に答える