3

node.jsクライアントが接続していることをコンソールに通知するサーバーの最小限の例を作成しました。次のバージョンのモジュールを使用しています

  • express@3.0.6
  • socket.io@0.9.13
  • node@0.8.7

だから私はこれを書いた:

app.js

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

var app = express();

var server = http.createServer(app);

var io = socket.listen(server);
//var io = socket.listen(app);

io.sockets.on('connection',function(client){
        console.log("Client connected...");

        client.emit('messages', {hello: 'world'});
});

app.listen(8080);

index.html

<script src="node_modules/socket.io/lib/socket.io.js"></script>
<script>
    var server = io.connect("http://localhost:8080");

    server.on('messages', function(data){
        alert(data.hello);
    });

</script>

カタログ構造は次のとおりです。

|-- app.js
|-- index.html
`-- node_modules
    |-- express
    |   |-- bin
    |   |-- client.js
    |   |-- History.md
    |   |-- index.js
    |   |-- lib
    |   |-- LICENSE
    |   |-- Makefile
    |   |-- node_modules
    |   |-- package.json
    |   |-- Readme.md
    |   `-- test.js
    `-- socket.io
        |-- benchmarks
        |-- History.md
        |-- index.js
        |-- lib
        |-- LICENSE
        |-- Makefile
        |-- node_modules
        |-- package.json
        `-- Readme.md
4

1 に答える 1

9

あなたのライン:

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

に置き換える必要があります

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

これを行うことで、ExpressJS自体ではなく、socket.ioの内部静的サーバーを介してクライアントの静的socket.io.jsモジュールを直接提供します。

編集1:

ああ、私はあなたのindex.htmlファイルを提供する方法について言及するのを忘れたので、基本的にあなたは設定する必要があります

var app = express();

app.use(express.static(__dirname + '/public'));

次に、index.htmlファイルを/publicディレクトリに配置します

編集2:(説明)

ExpressJSは、内部静的ファイルハンドラーを介して静的ファイルを提供します。この行app.use(express.static(__dirname + '/public'));は、実際にはnode.jsに渡されたリクエストをパブリックフォルダーに再ルーティングします。

一方、Socket.ioは(別のライブラリとして)静的ファイルを提供する独自のメソッドを持っており、URLを含むGETリクエストでのみトリガーされます:(/socket.io/socket.io.jsブラウザ用に提供される別のフラッシュファイル.swfがありますが、 Websocketをサポートしていません)

ExpressJSAPISocket.iowikiから詳細を学ぶことができます。

于 2013-01-14T22:05:26.333 に答える