2013-10-13 10 views
6

Próbuję utworzyć aplikację HTML5/JS i korzystać z usługi mobilnej Azure dla mojego zaplecza.Usługa Azure Mobile Service i socket.io

Na podstawie ScottGu's post, gdzie demonstruje wsparcie dla źródła i obsługi modułu npm, zastanawiam się, czy możliwe jest użycie socket.io do włączenia powiadomień w czasie rzeczywistym i korzystania z WebSockets.

Widzę, w jaki sposób można wprowadzić moduł i użyć go do każdego konkretnego żądania (np. Gdy klient POSTS do zasobu, dodaje hak do nadawania tworzenia zasobu wszystkim klientom), ale ja nie jestem pewien, jak skonfigurować i udostępnić obiekt socket.io.

NB. Zdaję sobie sprawę z wbudowanej obsługi powiadomień opartych na systemie push dla iOS, Windows i Google, ale nie jest to (jeszcze) gotowe rozwiązanie dla projektów internetowych - dlatego chce używać socket.io (lub dowolnego innego Odpowiednik SignalR-esque).

Odpowiedz

1

Oprogramowanie WebSocket powinno działać prawidłowo w Usługach Azure Mobile, ponieważ po prostu "obniża" połączenie HTTP z powrotem do gniazda z ramkami (bardziej jak niezawodne UDP). Ale jest kilka zastrzeżeń:

  • Jeśli korzystasz z Socket.IO, przeglądarki/proxy nie obsługują WebSocket domyślnie zastępują XHR. Jednak Socket.IO over XHR wymaga wielu punktów końcowych adresów URL i nie powiedzie się w Usługach Azure Mobile. Szczegóły specyfikacji protokołu Socket.IO pod adresem https://github.com/learnboost/socket.io-spec
  • Musisz użyć Redis (redis.io) do obsługi farmy serwerów przez Socket.IO, które wymagają systemu Linux. Mają tylko eksperymentalną kompilację na platformie Windows na teraz

Wolałbym ustawić inny zestaw maszyn dedykowanych dla serwera Socket.IO, aby nie zawiedzieły w przeglądarkach/serwerach proxy, które nie obsługują WebSocket. Wtedy, gdy ktoś POST do API w Azure Mobile Services, API będzie kolejkować wiadomość do kolejki komunikatów i sygnalizuje wszystkim serwerom Socket.IO, aby nadały komunikat.

1

Wsparcie Socket.IO został dodany przy użyciu rozszerzenia skrypt startowy

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(); 
} 

szczegóły patrz: http://azure.microsoft.com/blog/2014/08/26/how-to-use-socket-io-with-azure-mobile-service-node-backend/