7

Windows azure プロジェクトに socket.io を使用しています。奇妙なことに、Web ロールをデプロイするだけで socket.io サーバーが起動しますが、クラウド プロジェクト全体をデプロイすると、socket.io サーバーが起動せず、このエラーが発生します -

"SCRIPT7002: XMLHttpRequest: Network Error 0x2efd, Could not complete the operation due to error 00002efd."

それが何を意味するのか、私にはまったくわかりません。誰かがこれについて私を助けることができますか? 私は一日中それについて頭を叩いています。

SocketClient.html

<script>
var socket = io.connect('http://127.0.0.1:4001');
socket.on('news', function (data) {
    console.log(data);       
});

$(function () {
    $("#sendresponse").bind("click", function () {
     socket.emit('server', 'Hello World');

    });
}
);
</script>

App.js

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

server.listen(4001);

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

io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'first time connect' });
socket.on('server', function (data) {
    console.log(data);
    socket.emit('news',"hello");
});
});
4

1 に答える 1

3

クラウド プロジェクトをデプロイしたときに App.js スクリプトが実行されていなかったことが判明しました。つまり、クラウド プロジェクト全体がデプロイされたときに、web.config に入れていた iisnode ハンドラーが機能していませんでした。この記事を読んだ後、Web ロールの bin フォルダー、つまり ChangeConfig.ps1、download.ps1、node.cmd、setup_web.cmd にいくつかのファイルを配置する必要があることがわかりました。その記事を読むときにこれらのファイルを生成できます。そして最後に、このコードを ServiceDefinition.csdef に入れる必要があります

<Startup>      
 <Task commandLine="setup_web.cmd &gt; log.txt" executionContext="elevated">
    <Environment>
      <Variable name="EMULATED">
        <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
      </Variable>
      <Variable name="RUNTIMEID" value="node;iisnode" />
      <Variable name="RUNTIMEURL" value="" />
    </Environment>
  </Task>
</Startup>

そして出来上がり!それは魅力のように機能します。ブラウザで 127.0.0.1/App.js を実行して、socket.io サーバーを起動する必要があります。App.js をプログラムで起動する方法をまだ検討中です。

于 2013-03-07T06:14:36.620 に答える