Azure移动服务和socket.io

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

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

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

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

WebSocket在Azure移动服务上应该没问题,因为它只是将HTTP连接“降级”回到带有成帧(更像可靠的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平台上进行实验性构build

我宁愿为Socket.IO服务器设置一套不同的机器,以便在不支持WebSocket的浏览器/代理服务器上不会失败。 然后,当有人在Azure移动服务上发布到API时,API会将消息排队到消息队列,并通知所有的Socket.IO服务器广播消息。

已经使用启动脚本扩展添加了对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/