Azure移动服务和socket.io

5
我正在尝试创建一个HTML5 / JS应用程序,并使用Azure移动服务作为后端。根据ScottGu的帖子,他展示了源代码控制和npm模块支持,我想知道是否可以使用socket.io来启用实时通知和WebSockets的使用。我可以看到如何引入模块并将其用于每个特定请求(例如,当客户端POST到资源时,添加钩子以将资源的创建广播给所有客户端),但我不确定如何设置和共享socket.io对象。注意:我知道iOS、Windows和Google的推送通知内置支持,但它还没有为基于Web的项目提供开箱即用的解决方案-因此想要使用socket.io(或任何类似SignalR的替代方案)。
2个回答

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/


1
WebSocket在Azure移动服务中应该是可以使用的,因为它只是将HTTP连接“降级”回带有帧的Socket(更像是可靠的UDP)。但是有一些注意事项:
  • 如果您正在使用Socket.IO,则不支持WebSocket的浏览器/代理将默认回退到XHR。但是,通过XHR的Socket.IO需要许多URL端点,并且在Azure移动服务上会失败。有关Socket.IO协议规范的详细信息,请访问https://github.com/learnboost/socket.io-spec
  • 您需要使用Redis(redis.io)来支持Socket.IO上的服务器群集,这需要一个Linux服务器。目前,他们仅在Windows平台上提供实验性构建。

我更愿意设置一组专用于Socket.IO服务器的不同机器,以便在不支持WebSocket的浏览器/代理上不会失败。然后,当有人对Azure移动服务上的API进行POST时,API将向消息队列排队一条消息,并通知所有Socket.IO服务器广播该消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接