套接字IO网:: ERR_CONNECTION_REFUSED

时间:2017-02-05 14:58:23

标签: node.js sockets angular socket.io azure-web-sites

我正在尝试将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>

我收到以下错误 enter image description here

我不确定什么是错的。这是文件系统的结构

ROOT
app/
index.html
server.js
web.config

PS:这是一个Angular2应用程序

PS:我已根据此错误检查了所有建议的问题,但没有解决我的问题,因此我发布了这个问题。

1 个答案:

答案 0 :(得分:1)

根据我的经验,Azure Web App不会将loaclhost127.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门户启用它。

  • 在浏览器中,转到Azure portal,然后导航到您的App Service。
  • 点击 API 菜单中的 CORS
  • 在空允许的来源文本框中输入每个网址。将创建一个新文本框。或者,您可以输入星号(*)来指定接受所有原始域。
  • 点击保存

enter image description here

Socket.IO使用WebSockets,Azure上默认不启用它。您还可以使用Azure门户启用WebSocket支持。请参阅以下步骤。

  • 在Azure门户中,点击设置菜单中的应用设置
  • 网络套接字下,点击开启
  • 点击保存

enter image description here

有关详细信息,请参阅this documentation