Auparavant, j'utilise Apache pour servir HTTP combiné avec certains python J'écoute sur une prise à haute teneur pour la bande Websocket, mais cela ne fonctionnera évidemment pas ici.
Je peux toujours déplacer les choses de Websocket sur un serveur séparé, mais j'aimerais éviter de payer pour un deuxième VPS (et devez parler à la base de données sur le réseau au lieu de localement). Y a-t-il un bon moyen de le faire (Nodejs, Nginx, ..?) Ou ne vaut-il pas la mal à la tête?
Une autre possibilité est d'utiliser mod_proxy dans Apache pour rediriger les demandes d'un serveur WebSocket.
Oui, en utilisant nœud.js . Express ou Connect pour la serveur de fichiers HTTP et socket.io pour la bande Websocket.
Exemple:
var express = require("express");
var app = express.createServer();
app.get('/', function(req, res){
res.redirect("/index.html");
});
app.configure(function(){
app.use(express.static(__dirname + '/public'));
});
app.listen(80);
var io = require('socket.io');
var socket = io.listen(app);
socket.on('connection', function(client){
client.on('message', function(){...});
})
Bien sûr, vous pouvez le faire.
Tout d'abord, vous devez vérifier votre version Apache. Vous devriez avoir 2.4+ version. Je vais vous montrer votre commande pour mon serveur sur Ubuntu 14.4.
Deuxièmement, allumez les modules Apache nécessaires:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel
Ouvrez Conf de votre domaine, dans mon cas, c'était un chemin de fichier:
/etc/Apache2/sites-available/myDomain.pl.conf
Ensuite, appendez ce code
<VirtualHost>
.
.
.
RewriteEngine on
RewriteCond %{QUERY_STRING} transport=polling
RewriteRule /(.*)$ http://localhost:3001/$1 [P]
ProxyRequests off
ProxyPass /socket.io ws://localhost:3001/socket.io
ProxyPassReverse /socket.io ws://localhost:3001/socket.io
ProxyPass /socket.io http://localhost:3001/socket.io
ProxyPassReverse /socket.io http://localhost:3001/socket.io
</VirtualHost>
Finaly redémarrez votre Apache
service Apache2 restart
S'amuser!
Pour Secure Webocket, tout ce dont je devais faire était d'ajouter ces trois lignes à mon HTTPS Virthaualhost:
<VirtualHost *:443>
[...https config...]
SSLProxyEngine On
ProxyPass "/web_socket" "wss://localhost:7300/web_socket"
ProxyPassReverse "/web_socket" "wss://localhost:7300/web_socket"
</VirtualHost>
Et activer le module mod_proxy_wstunnel Apache (je cours Apache 2.4.10):
a2enmod proxy_wstunnel
Glassfish (et Grizzly) prend en charge le trafic http et Webockets sur le même port si un Java Server est une option.