39

node.js と socket.io を使い始めようとしています。
非常に (非常に) 単純なクライアント/サーバー テスト アプリケーションを使用していますが、動作させることができません。
システムは、Apache サーバーを備えた Windows マシンにセットアップされています。
Apacheが実行されport 81ており、socket.ioがリッスンするように設定されていますport 8001

サーバー- server.js

var io = require('socket.io').listen(8001);

io.sockets.on('connection', function (socket) {
    console.log('\ngot a new connection from: ' + socket.id + '\n');
});

クライアント- index.html

<!DOCTYPE html>
<html>
<head>
    <title>node-tests</title>
    <script type="text/javascript" src="http://localhost:8001/socket.io/socket.io.js">    </script>
    <script type="text/javascript">
        var socket = io.connect('http://localhost', { port: 8001 });

        socket.on('connect', function () {
            alert('connect');
        });

        socket.on('error', function (data) {
            console.log(data || 'error');
        });

        socket.on('connect_failed', function (data) {
            console.log(data || 'connect_failed');
        });
    </script>
</head>
<body>

</body>
</html>

標準 (期待される) 出力を使用してサーバーを起動node server.jsすると、サーバー コンソールに次のように書き込まれます。

info: socket.io started

index.htmlブラウザー (私の場合はクロム - 他のブラウザーではテストしていません) で開くと、次のログがサーバー コンソールに書き込まれます。

info: socket.io started
debug: served static content /socket.io.js
debug: client authorized
info: handshake authorized 9952353481638352052
debug: setting request GET /socket.io/1/websocket/9952353481638352052
debug: set heartbeat interval for client 9952353481638352052
debug: client authorized for

got a new connection from: 9952353481638352052

debug: setting request GET /socket.io/1/xhr-polling/9952353481638352052?t=1333635235315
debug: setting poll timeout
debug: discarding transport
debug: cleared heartbeat interval for client 9952353481638352052
debug: setting request GET /socket.io/1/jsonp-polling/9952353481638352052?t=1333635238316&i=0
debug: setting poll timeout
debug: discarding transport
debug: clearing poll timeout
debug: clearing poll timeout
debug: jsonppolling writing io.j[0]("8::");
debug: set close timeout for client 9952353481638352052
debug: jsonppolling closed due to exceeded duration
debug: setting request GET /socket.io/1/jsonp-polling/9952353481638352052?t=1333635258339&i=0
...
...
...

ブラウザのコンソールに次のように表示されます。

connect_failed

したがって、クライアントがサーバーに到達して接続しようとしているように見え、サーバーはハンドシェイクを承認していますがconnect、クライアントでイベントが発生することはなく、代わりに connect メソッドが到達しconnect timeoutmax reconnection attemptsを返すことを断念しconnect_failedます。

これに関するヘルプ\洞察は役に立ちます。

ありがとうございました

4

7 に答える 7

10
//Client side
<script src="http://yourdomain.com:8001/socket.io/socket.io.js"></script>
var socket = io.connect('http://yourdomain.com:8001');

//Server side
var io = require('socket.io').listen(8001);
io.sockets.on('connection',function(socket) {
`console.log('a user connected');`
});

クライアント側: クライアント側のコードは、サーバー側の socketIO を提供する同じファイルからソケット IO のクライアント バージョンを要求します。Var socket には、socket.emit や socket.on など、socketIO で使用できるすべてのメソッドが含まれるようになりました。

サーバー側: クライアント側と同じで、socketIO メソッドを var io で使用できるようにします。

于 2014-09-15T17:13:48.537 に答える
4

フロントエンド (クライアント) の変更:

var socket = io.connect(http://myapp.herokuapp.com);

var socket = io.connect();

サーバーへの接続を適切に登録しなかったさまざまなクライアント (Chrome、Firefox ブラウザー、および Phonegap アプリ) を何時間も処理した後 (つまり、サーバーは Websocket 接続をログに正常に登録しましたが、フロントエンドは接続イベントを登録しませんでした)、コメントから @Timothy のソリューションを試してみたところ、heroku と localhost ですべてが再び機能するようになりました。

于 2014-04-10T23:33:51.107 に答える
-1

次のことを試してください。

変化する

var socket = io.connect('http://localhost', { port: 8001 });

var socket = io.connect('http://localhost:8001');
于 2012-04-20T20:12:45.193 に答える