6

我正在尝试创建一个 HTML5 / JS 应用程序并为我的后端使用 Azure 移动服务。

根据ScottGu 的帖子,他演示了源代码控制和 npm 模块支持,我想知道是否可以使用 socket.io 来启用实时通知和 WebSockets 的使用。

我可以看到如何能够引入模块并为每个特定请求使用它(例如,当客户端发布到资源时,添加一个挂钩以将资源的创建广播给所有客户端)但我不确定如何设置和共享 socket.io 对象。

注意。我知道对 iOS、Windows 和 Google 的基于推送的通知的内置支持,但它(还)没有为基于 Web 的项目提供开箱即用的解决方案 - 因此想要使用 socket.io(或任何SignalR-esque 等效)。

4

2 回答 2

1

WebSocket 在 Azure 移动服务上应该没问题,因为它只是将 HTTP 连接“降级”回带帧的 Socket(更像是可靠的 UDP)。但有几点需要注意:

  • 如果您使用的是 Socket.IO,浏览器/代理不支持 WebSocket 将默认回退到 XHR。但是 XHR 上的 Socket.IO 需要大量 URL 端点,并且在 Azure 移动服务上会失败。https://github.com/learnboost/socket.io-spec上的 Socket.IO 协议规范的详细信息
  • 您需要使用 Redis (redis.io) 来支持通过 Socket.IO 的服务器场,这需要 Linux 机器。他们目前只有在 Windows 平台上的实验版本

我宁愿设置一组专用于 Socket.IO 服务器的不同机器,这样它就不会在不支持 WebSocket 的浏览器/代理上失败。然后,当有人 POST 到 Azure 移动服务上的 API 时,API 会将消息排队到消息队列中,并向所有 Socket.IO 服务器发出信号以广播消息。

于 2014-01-07T08:18:05.343 回答
1

使用启动脚本扩展添加了对 Socket.IO 的支持

var path = require('path');

exports.startup = function (context, done) {
    var io = require('socket.io')(context.app.server);
    io.on('connection', function(socket){
      socket.on('chat message', function(msg){
        io.emit('chat message', msg);
      });
    }); 

       context.app.get('/public/chat.html', function(req, res) {
        res.sendfile(path.resolve(__dirname, '../public/chat.html'));
    }); 
    done();
}

有关详细信息,请参阅:http ://azure.microsoft.com/blog/2014/08/26/how-to-use-socket-io-with-azure-mobile-service-node-backend/

于 2014-09-09T02:16:54.440 回答