我正在尝试将socket.io实现到我的Azurewebsites托管的应用程序中。 webapp
这是server.js
var app = require('express')();
var server = require('http').createServer(app);
server.listen(process.env.PORT || 3001)
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
var io = require('socket.io')(server);
io.on('connection', function (socket) {
console.log("Socket connected :"+socket.id);
socket.emit('news', { hello: 'world' });
});
这是客户端套接字。的index.html
<script src="socket.io/socket.io.js"></script>
<script>
var socket = io('http://localhost:3001');
console.log("scoekt connect",socket)
socket.on('connect', function(){ console.log('connected to socket'); });
socket.on('error', function(e){ console.log('error' + e); });
socket.on( 'news', function( data ){
console.log("socket data",data);
});</script>
我不确定什么是错的。这是文件系统的结构
ROOT
app/
index.html
server.js
web.config
PS:这是一个Angular2应用程序
PS:我已根据此错误检查了所有建议的问题,但没有解决我的问题,因此我发布了这个问题。
答案 0 :(得分:1)
根据我的经验,Azure Web App不会将loaclhost
或127.0.0.1
绑定到您的网站,只有端口80和443面向公众。这会映射到您的应用可以收听的特定端口,可通过process.env.PORT
检索。所以你需要更换
var socket = io('http://localhost:3001');
与
var socket = io('http://<your app name>.azurewebsites.net');
如果您的服务器端和客户端位于不同的域中,您还需要在服务器端启用CORS。在Azure中,我们可以使用Azure门户启用它。
Socket.IO使用WebSockets,Azure上默认不启用它。您还可以使用Azure门户启用WebSocket支持。请参阅以下步骤。
有关详细信息,请参阅this documentation。