2011-05-11 18 views
27
  1. Estoy construyendo un sitio que usa conectores web (técnicamente tomas de corriente) para proporcionar comunicación en tiempo real.
  2. Quiero ser capaz de apoyar a las personas detrás de cortafuegos académicos/corporativos que bloquean todo excepto el puerto 80
  3. que me gustaría ser capaz de ejecutar el sitio fuera de una sola máquina

Anteriormente, He estado usando Apache para servir HTTP combinado con un poco de Python escuchando en un socket de alto numerado para las cosas de websocket, pero obviamente eso no funcionará aquí.¿Es posible usar el puerto 80 para tráfico HTTP y socket web?

Siempre puedo mover el material de la conexión a otro servidor, pero me gustaría evitar pagar un segundo VPS (y tengo que hablar con la base de datos a través de la red en lugar de localmente). ¿Hay una buena manera de hacer esto (nodejs, nginx, ..?), O no vale la pena el dolor de cabeza?

+0

posible duplicado de (http://stackoverflow.com/questions/2924991/what-popular-webservers-have-support-for-html5-websocket) – jgauffin

Respuesta

6
+0

Tenga en cuenta que ** pywebsocket ** no está destinado a la producción, sino solo para pruebas (implementación del cliente), en el cual, sin embargo, es muy bueno por cierto. – Levit

-6

La respuesta corta es no porque solo puede escuchar un proceso en un puerto. Podría intentar usar el puerto 443, ya que tampoco se bloqueará, siempre y cuando no use https.

+1

-1: En primer lugar, el proceso múltiple ** puede ** escuchar en el mismo puerto en algunos casos (bifurcación: por ejemplo, Apache genera un proceso por solicitud). En segundo lugar, servir WebSockets se puede hacer dentro de un proceso, es decir, un cliente abre TCP y, dependiendo de si envía HTTP (estándar) o WebSocket, lo maneja de manera diferente. – freakish

+0

especificó apache y python. Solo estaba tratando de responder eso, si estás usando apache y python, no sé cómo hacer que ambos procesos estén escuchando en el mismo puerto al mismo tiempo. – nycynik

+9

@freakish Técnicamente, múltiples procesos ** no ** están escuchando en el mismo puerto. Un proceso es escuchar y cuando recibe algo maneja ese proceso para manejar la solicitud y vuelve a escuchar. En resumen, solo un proceso está siempre escuchando. Todo lo demás que has dicho es completamente correcto. – CrazyCasta

14

SÍ, utilizando node.js. Express o connect para la entrega del archivo HTTP y socket.io para las cosas de WebSocket.

Ejemplo:

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(){...}); 
}) 
+0

¿Podría explicarme qué hace? –

0

GlassFish (y grisáceo) apoyar tanto HTTP y websockets tráfico en el mismo puerto si un servidor java es una opción.

3

Por supuesto que puede hacer esto.

Primero tiene que verificar su versión de Apache. Deberías tener la versión 2.4+. Le mostraré el comando para mi servidor en Ubuntu 14.4.

En segundo lugar, encienda los módulos necesarios de Apache:

a2enmod proxy 
a2enmod proxy_http 
a2enmod proxy_wstunnel 

conf abierto de su dominio, en mi caso que era una vía al archivo:

/etc/apache2/sites-available/myDomain.pl.conf 

A continuación, anexe el código

<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 reinicie su apache

service apache2 restart 

¡Diviértete!

+0

Gracias, esto funciona genial. Sin embargo, ¿cuál es el propósito de RewriteCond y RewriteRule? Parece funcionar bien sin esos. – CpnCrunch

0

Para quienes usan Django, Channels es la respuesta.Según la comunidad, Channels se lanzará oficialmente en Django 1.10.

Mis razones para tratar de Canales:

  • opciones para combinar HTTP con serivice WebSocket
  • Django autenticación de sesión de usuario está disponible en el servicio de WebSocket
0

Para WebSocket seguro, todo lo que tenía que hacer era agregar estas tres líneas a mi https virthualhost:

<VirtualHost *:443> 

    [...https config...] 

    SSLProxyEngine On 
    ProxyPass "/web_socket" "wss://localhost:7300/web_socket" 
    ProxyPassReverse "/web_socket" "wss://localhost:7300/web_socket" 

</VirtualHost> 

Y permitir que el (Apache estoy corriendo 2.4.10) mod_proxy_wstunnel Apache módulo: [? Qué servidores web populares tienen soporte para HTML5 WebSocket]

a2enmod proxy_wstunnel 
Cuestiones relacionadas