0

Guillermo Rauch によるローカルおよび cloud9 プラットフォームでの非常に基本的な socket.io チャット例 (予備テスト) の 1 つを使用して、自分のマシンで socket.io を動作させることができません。私はexpress 2.5.xとexpress 3の両方と組み合わせてsocket.ioを試しました(それに応じてサーバーコードを変更します)、Nodeclipseとコマンドラインの実行の両方を使用して同じ動作を取得します:

情報: socket.io が
ポート 3000 で @ localhost を実行しているソケット サーバーを開始しました

訪問すると、次のlocalhost:3000ようになります。

デバッグ: 提供された静的コンテンツ /socket.io

ハンドシェークがなく、クライアントが接続していない可能性があります。
おそらく問題は簡単にわかりますが、ここや他の場所で自分のケースに合った答えを見つけることができませんでした. ここに私の環境があります:

Windows 7 x86 または Windows 8 64 ビット。最新の安定したノードで Nodeclipse (間違っていなければ 0.10.15); 使用: google chrome、firefox、最新の IE。

また、WAMP サーバー経由でインデックス ページを提供しようとしました。

多くの代替案を試しましたが、これはコードの問題ではなく、何か他のものに属していることを示唆しているようです (最新のノードのインストールでうまく動作しないことを表現しますか? 環境変数に何か問題がありますか?);

Express は /socket.io/socket.io.js ファイルを提供しているようです。これは、localhost:3000/socket.io/socket.io.js と入力すると、どのブラウザーからでも読み取ることができるためです (これが正しいかどうかはわかりません)。テスト)。

クライアントコードは次のとおりです。

<!doctype html>
<html>
<head>
    <title>my test</title>
    <script src="/socket.io/socket.io.js"></script>
    <script src="chat.js">
    <link href="/stylesheets/style.css" rel="stylesheet" />
</head>
<body>
    <div id="chat">
        <ul id="messages"></ul>
        <form id="form">
            <input type="text" id="input" />
            <button>Send</button>
        </form>
    </div> 
</body>
</html>

サーバー側アプリは次のとおりです。

var express = require('express');
var sio = require('socket.io');
var app = express.createServer(
        express.bodyParser(),
        express.static('public'));
app.listen(3000);

var io = sio.listen(app);

console.log('Socket server running @ localhost on port ' + 3000);

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

chat.js には以下が含まれます。

window.onload = function() {
    var socket = io.connect("http://localhost:3000");
    socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
};

これらは、nodeclipse ワークスペース フォルダー (c:/users/myname/workspace/nameoftheapp) から指定された npm install コマンドを介してローカルにインストールされた (express もグローバルにインストールされた) socket.io および Express のバージョンです。 ", "socket.io": "0.9.16"

プロジェクトの構造

node_modules  
|- [...] (all the installed folders and files]  
public  
|- stylesheets  
--|-style.css  
|- index.html  
app.js  
package.json  
readme.md  

ワークスペースを正しく指すように接続に何かを設定する必要がありますか?

4

2 に答える 2

0

Cloud9 でsocket.ioを使用する方法を理解しようとしているときに、この質問に遭遇しました。Cloud9があなたの質問にどのように影響するかはわかりませんが(タイトルに記載されています)、私にとってはクライアントからのハンドシェイクを確立できず、 Cloud9ターミナルdebug: served static contentでメッセージしか受け取りませんでした。最終的に、問題を引き起こしているのはクライアントの接続リンクであることがわかりました。ピーターが言ったように、さまざまな変数の間で混乱する可能性があるため、socket.io を使用して Express をセットアップすることも簡単ではありませんでした。

サーバーコード:

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

server.listen(process.env.PORT || 3000, function() {
    console.log('Express server started on port %s', process.env.PORT);
});

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

クライアントコード:

<script src="/socket.io/socket.io.js"></script>
<script>
    var socket = io.connect(window.location.hostname);
    socket.on('news', function(data) {
        console.log(data);
        socket.emit('my other event', {
            my: 'data'
        });
    });
</script>

window.location.hostnameスクリプトがCloud9テスト サーバーと、アプリをデプロイする場所 (私の場合はHeroku ) の両方で機能するように使用しました。

Express 3.2.6およびとともに使用しSocket.io 0.9.13ます。

于 2013-10-23T18:35:44.143 に答える
0

http.createServer代わりに使用する必要がありますexpress.createServer

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

server.listen(3000, function () {
  console.log("listening on port 3000");
});
于 2013-08-08T14:05:32.850 に答える