20

私はsocket.ioとnode.jsを使い始めようとしています。

socket.io のサイトの最初の例に従っていると、ブラウザーのコンソールに次のエラーが表示されます。

Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:3001/socket.io/socket.io.js
Uncaught ReferenceError: io is not defined 

これは私のserver.jsです

var app = require('express').createServer()
  , io = require('socket.io').listen(app);

app.listen(3001);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

そして、これは私のindex.htmlです

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <meta charset="UTF-8" />
  </head>
  <body>
    <script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>
  </body>
</html>

私はすでにsocket.ioをインストールしています..

4

7 に答える 7

26

問題

  • まず、サーバーapp.listen(3001);に到達するために、クライアント側でサーバーがバインドされているサーバーポート()を確認する必要があります。

  • socket.ioの場合http://localhost:3001、リンクタグの残りのソースの前に追加すると、この問題が解決します。これは明らかに、ネットワークがポートをローカルホストにバインドする方法によるものですが、原因についてさらに情報を見つけようとします。

変更する内容:


サーバーのポートバインディング:

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

に変更する必要があります

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



socket.ioを動作させる:

<script src="/socket.io/socket.io.js"></script>

に変更する必要があります

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


于 2012-07-26T07:54:27.740 に答える
7

expressバージョン 3.xを使用している場合、Socket.IO の互換性の問題があり、移行するには微調整が必​​要です。

Socket.IO の.listen()メソッドは、http.Serverインスタンスを引数として取ります。
3.x の時点で、の戻り値はインスタンスでexpress()はありません。http.ServerSocket.IO を Express 3.x で動作させるには、http.Serverインスタンスを手動で作成して Socket.IO の.listen()メソッドに渡すようにしてください。

簡単な例を次に示します。

var app = express()
  , http = require('http')
  , server = http.createServer(app)
  , io = require('socket.io').listen(server);

server.listen(3000);
于 2013-02-06T19:28:27.870 に答える
3

まず、Socket.io の「How To Use」ドキュメントはあいまいです (おそらく誤解を招く可能性があります)。特に Socket.io クライアントのコードを文書化する場合。

第二に、StackOverflow に関するここでの回答は具体的すぎます。Socket.io クライアントのプロトコル、ホスト名、およびポート番号を手動でハードコーディングする必要はありません。それはスケーラブルなソリューションではありません。Javascript は、ロケーション オブジェクトを使用してこれを処理できます - window.location.origin

Socket.io を使い始める

インストール

Socket.io には、サーバーとクライアントのインストールが必要です。

サーバーをインストールするには
npm install socket.io

クライアントを使用するには、このスクリプトをドキュメント (index.html) に追加します。
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>

Express 3/4 による実装

次のファイルを作成します。

サーバー (app.js)

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(80);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

クライアント (index.html)

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<script>
  // origin = http(s)://(hostname):(port)
  // The Socket.io client needs an origin
  // with an http(s) protocol for the initial handshake.
  // Web sockets don't run over the http(s) protocol,
  // so you don't need to provide URL pathnames.
  var origin = window.location.origin;
  var socket = io.connect(origin);
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>
于 2016-02-23T23:52:50.010 に答える
0

これを試して

var app = express()
,http = require('http');

var server = http.createServer(app);
server.listen(3001);
io = require('socket.io').listen(server);
io.set('log level', 1); 

それが役に立てば幸い

于 2014-02-05T13:00:25.697 に答える
0

これを別のコンピューターで実行しようとしていて、このエラーが発生した場合、これが役立つことがあります。

var host = window.location.hostname; 
var socket = io.connect('http://' + host);

https を使用している場合は、明らかにプロトコルも変更する必要があります。私の場合、複数のローカル コンピューターで実行されるサーバーを作成する必要があったため、ここに固定アドレスを配置しても機能しません。ソケットは、ページをロードするサーバーに応じて異なるアドレスに接続する必要があるためです。これをここに追加すると、他の人にも役立つ可能性があります。

于 2014-02-05T12:46:29.183 に答える
-3

これが非常に遅いことはわかっていますが、以前に node.js をセットアップしたことがある人向けの解決策を見つけました。私のマシンはハードウェアを交換する必要がありましたが、戻ってきたとき、かなりの数の設定が工場出荷時のデフォルトに戻っていることに気付きました。上記のエラーも発生していました。

ランニング

sudo apachectl 開始

ターミナルから私の問題を修正しました。

于 2013-05-09T00:50:18.777 に答える