私は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 > 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>
あなたのコンピュータのブラウザでそのクライアントのhtmlを開く場合、127.0.0.1:80はあなたが望むアドレスではありません。あなたは紺碧の労働者のIP /ポートが必要です。 – dvlsg
まあ、URLとポートを使用すると動作しません。私はちょうどポート80で開始されたメッセージを取得します。私がコメントしたio.configurationセクションは、すべて一緒に停止するようです。 – Brian
外部から内部へのポートをマッピングするエンドポイントを設定しましたか? –