Socket.ioを機能させようとしていますが、Chromeでエラーが発生します:
Uncaught ReferenceError:require is not defined
client.php:9Uncaught ReferenceError:ioが定義されていません
Socket.io.jsファイルが他の場所に存在しないため、含める方法を変更しました。
<script src="/node_modules/socket.io/lib/socket.io.js"></script>
やってみたら
<script src="/socket.io/socket.io.js"></script>
次のようになります:リソースの読み込みに失敗しました:サーバーがステータス404(見つかりません)で応答しました
これはUbuntuにあり、最新のものがすべて含まれています
http://socket.io/ のサーバーコードを使用して、client.phpと同じフォルダーで作業します。これは、server.jsという名前で、変更されたポートのみで機能します。
スクリプトがWebサーバーからのものでない場合、これは機能しません。
<script src="/socket.io/socket.io.js"></script>
ホストとポートを明示的に指定する必要があります。
<script src="http://localhost:<port>/socket.io/socket.io.js"></script>
サーバー上で node.js along PHP)を実行していますか?
serverとclientの2つの「socket.io」パッケージがあります。 サーバーサーバー(/node_modules/socket.io/lib/socket.io.js
)をブラウザにロードしようとしています。必要なスクリプトはsocket.io-clientと呼ばれ、 https://raw.github.com/LearnBoost/socket.io-client/master/socket)にあります。 io-client.js
何が起こるかというと、socket.ioはポート80から/socket.io/socket.io.js
(クライアントのもの)ファイルを自動的に提供しますポート80でノードを実行している場合。あなたの場合、Apacheはすでにポート80にあるので、そこからファイルを手動で提供する必要があります。
ライブラリに(/socket.io/socket.io.js
)が含まれているクライアントブラウザのコーディングはおそらく問題ありませんでした。ただし、socket.io.js
の間違ったコピーを指している可能性があります。(socket.io
)を使用してnpm install socket.io
をインストールした場合は、次のディレクトリでsocket.io.js
のクライアントバージョンを探してください。
C:\Program Files (x86)\nodejs\node_modules\socket.io\node_modules\socket.io-client\dist\socket.io.js
そこにある場合は、そのモジュールをWeb公開ディレクトリにコピーすることをお勧めします。OR代わりに、仮想ディレクトリが指す物理パスを変更できます。
私はthejhが言うことを試しました、そしてそれは働きます。ホストとポートを指定する必要がありました。ポート81でリッスンしているノードアプリの場合、クライアントJavaScriptでポート81を指定する必要がありました。 /socket.io/socket.io.jsがvhostに存在しないことを気にしないでください。ノードは、実行時にそれを補います。
他の人が指摘しているように、ioがサーバー側で実行されると、「socket.io.js」の「automagical」サービスが提供され、libディレクトリ内の他のjsファイルに分岐します。
私が付け加えたいのは、これは直感的ではなく、通常のWebサーバーにこのファイルを提供させることはできないということです。エラーはさらに奇妙になり、一見矛盾しているように見えます(定義されていない必要があるなど)。これは通常のjsファイルではありません。そこにあるすべてのチュートリアルでそれを強調してほしいと思います。
とにかく、たとえばnginxの背後で実行している場合は、ポート設定をノードに割り当てられたのと同じポート(私の場合はポート3000)に設定します。私は次のようにクライアントでそのポートを使用しました:
<script src="http://localhost:3000/socket.io/socket.io.js"></script>
...そしてサーバーコードでポート3000も使用しました-例としてserver-js-codeをコーディングできる方法/バージョンが多すぎて、「別の方法」を使用しているほとんどの人を混乱させます。
同じ問題が発生し、@ thejhのソリューションが機能したことを確認しました。しかし、彼の推薦を読んだとき、私はサーバーが「何であるか」について確信が持てませんでした。ポート80でMAMPを実行しています。以下のコードは、ポート8001で実行される「node.jsサーバー」です。
Node.jsサーバーを起動したら(以下のコードを実行)、 http:// localhost:4001/socket.io/socket.io.js にアクセスするとjavascriptファイルが返されます。
_/* Node.js server */
var sys = require('sys');
var io = require('socket.io');
var http = require('http')
server = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('http server started');
res.end();
});
server.listen(4001);
// socket.io
var socket = io.listen(server);
socket.on('connection', function(client) {
client.on('message', function(message) {
// We're in!
console.log('received client message '+ message);
});
client.on('disconnect', function() {});
socket.send('welcome to the local node.js server!');
});
_
Drupal内のユーザーの場合、_hook_init
_内のdrupal_add_js('http://localhost:4001/socket.io/socket.io.js', array('type' => 'external', 'group' => JS_LIBRARY));
がトリックを実行します。
require() is not defined
のようなものが表示された場合は、使用しているJavaScriptライブラリが AMD(非同期モジュール定義) の形式であることが原因である可能性があります。代わりに、 RequireJS (フル機能)または curl JSライブラリ (より小さく、より単純)を使用してSocketIOをロードしてみてください。
実際、今日、私はApacheにこれらのファイルを提供させることに成功しました。
Node_modules/socket.io/node_modules/socket.io-client/distのコンテンツのコピーをWebルートに作成するだけです(実際にファイルをコピーしました。ソフトリンクは試していませんでした)。 socket.ioをグローバルにインストールしたsocket.io(0.9.16)のインストールでは、次の2つのコマンドでうまくいきました。
Sudo cp -av /usr/lib/node_modules/socket.io/node_modules/socket.io-client/dist /var/www/socket.io
chown -R www-data:www-data /var/www/socket.io
これは、node.jsを追加する前にインストールされた通常のLAMPスタックであるUbuntu13.10ボックスにありました。
新しいバージョンのsocket.ioがリリースされたときにこのコピーの同期を維持することは、私がまだ対処しようとしていない問題です。
乾杯