2016-09-06 15 views
0

私はAzureワーカーの役割でソケットサーバーを設定しようとしていますが、何も動作していないようです。私はこのシンプルなチュートリアルを機能させるために努力していました。次のクライアントでAzure Worker Roleでsocket.ioを使用するには?

var port = process.env.port || 81; 

var app = require('http').createServer(handler) 
    , io = require('socket.io').listen(app) 

app.listen(port); 
console.log('socket.io server started on port: ' + port + '\n'); 

function handler (req, res) { 
    res.writeHead(200); 
    res.end('socket.io server started on port: ' + port + '\n'); 
} 

// io.configure(function() { 
// io.set("transports", ["xhr-polling"]); 
// io.set("polling duration", 10); 
// }); 

io.sockets.on('connection', function (socket) { 
    console.log('user connected'); 

    socket.on('sendMessage', function(data){ 
    console.log('user sent the message: ' + data.message + '\n'); 
    socket.emit('helloBack', { message: 'Hello back!' }); 
    }); 
}); 

::これはserver.jsファイルです

<!doctype html> 

<html lang="en"> 
<head> 
    <meta charset="utf-8"> 

    <title>Socket Test</title> 
    <meta name="description" content="The azure socket tutorial"> 


    <script src="https://cdn.socket.io/socket.io-1.3.4.js"></script> 
    <script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" crossorigin="anonymous"></script> 

    <script type="text/javascript"> 
     var socket; 
     $(document).ready(function() { 
      $("#startButton").click(function() { 
       $("#returnMessageLabel").empty(); 
       if (!socket) { 
        socket = io.connect("http://127.0.0.1:80/"); 
        socket.on('helloBack', function (data) { 
         $("#returnMessageLabel").text(data.message); 
        }); 
       } 
       socket.emit('sendMessage', { message: 'Hello there!' }); 
      }); 
     }); 
    </script> 
</head> 

<body> 
    <h1>Click to introduce yourself</h1> 
    <button id="startButton">Say Hello</button> 
    <label id="returnMessageLabel"></label> 
</body> 
</html> 

これは、ポート80でAzureEmulatorで正常に動作しますが、私は役割を発行するとき、私はメッセージ「ソケットを取得します。 ioサーバはポート80で起動しましたが、クライアントはsendMessageを送信するために接続できません。私は次は私のServiceDefinition.csdefファイルですhttps://dzone.com/articles/windows-azure-web-worker-roles

からこのチュートリアルを得た:

<?xml version="1.0" encoding="utf-16"?> 
<ServiceDefinition xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="dzoned" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> 
    <WorkerRole name="WorkerRole1"> 
    <Startup> 
     <Task commandLine="setup_worker.cmd &gt; log.txt" executionContext="elevated"> 
     <Environment> 
      <Variable name="EMULATED"> 
      <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> 
      </Variable> 
      <Variable name="RUNTIMEID" value="node" /> 
      <Variable name="RUNTIMEURL" value="http://az413943.vo.msecnd.net/node/0.6.20.exe" /> 
     </Environment> 
     </Task> 
     <Task commandLine="node.cmd .\startup.js" executionContext="elevated" /> 
    </Startup> 
    <Endpoints> 
     <InputEndpoint name="HttpIn" protocol="tcp" port="80" /> 
     <InputEndpoint name="SocketIn" protocol="http" port="81" /> 
    </Endpoints> 
    <Runtime> 
     <Environment> 
     <Variable name="PORT"> 
      <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/Endpoints/Endpoint[@name='HttpIn']/@port" /> 
     </Variable> 
     <Variable name="EMULATED"> 
      <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> 
     </Variable> 
     </Environment> 
     <EntryPoint> 
     <ProgramEntryPoint commandLine="node.cmd .\server.js" setReadyOnProcessStart="true" /> 
     </EntryPoint> 
    </Runtime> 
    </WorkerRole> 
</ServiceDefinition> 
+0

あなたのコンピュータのブラウザでそのクライアントのhtmlを開く場合、127.0.0.1:80はあなたが望むアドレスではありません。あなたは紺碧の労働者のIP /ポートが必要です。 – dvlsg

+0

まあ、URLとポートを使用すると動作しません。私はちょうどポート80で開始されたメッセージを取得します。私がコメントしたio.configurationセクションは、すべて一緒に停止するようです。 – Brian

+0

外部から内部へのポートをマッピングするエンドポイントを設定しましたか? –

答えて

0

クラウドサービスでWorkerロールのエンドポイントを設定してみてください。クラウドサービスプロジェクトでServiceDefinition.csdefを開き、ワーカーロール定義の下にエンドポイント構成を追加します。

E.G.

<WorkerRole name="WorkerRole1" vmsize="Small"> 
    <Endpoints> 
     <InputEndpoint name="HttpIn" protocol="http" port="81" /> 
    </Endpoints> 
... 
</WorkerRole> 

次に、プロジェクトをパッケージ化し、Azureにデプロイします。詳細はhttps://azure.microsoft.com/en-us/documentation/articles/cloud-services-enable-communication-role-instances/をご参照ください。

最新の情報は、お気軽にお知らせください。

+0

その行を追加しましたが、まだ動作していません。 ServiceDefinition.csdefファイルの内容を添付しました。 – Brian

+0

私はAzure Web Appを使い終わった – Brian

関連する問題