¿Es posible usar Socket.IO de forma cruzada? ¿Si es así, cómo? La posibilidad se menciona en la web, pero no se dan ejemplos de códigos en ninguna parte.Conexión entre dominios en Socket.IO
Respuesta
Citando las socket.io FAQ:
¿Soporta Socket.IO conexiones entre dominios?
¡Absolutamente, en todos los navegadores!
cuanto a cómo lo hace: WebSockets nativas son entre dominios por diseño, socket.io sirve un archivo de política de flash para el flash de comunicación entre dominios, XHR2 puede utilizar CORS, y finalmente siempre se puede utilizar JSONP.
Simplemente inserte su nombre de dominio remoto al crear el socket de cliente:
var socket = io.connect('http://example.com:8080');
Respuesta demasiado antigua. io.connect no es una función. –
'io.connect' todavía debería estar funcionando (2016): http://socket.io/docs/#using-with-express-3/4. También vea socket.io/docs/client-api/: "' connect' Disparó después de una conexión exitosa. " – vinyll
Socket.io soporta conexiones entre dominios, pero tenga en cuenta que su cookie no se pasa al servidor. Tendrás que:
(1) crear un esquema de identificación alternativo (un token personalizado o una cookie de JavaScript, solo ten en cuenta que esta no debe ser la identificación de la sesión, a menos que quieras ponerte en riesgo de secuestro de sesión)
o (2) envíe primero una solicitud HTTP JSONP al servidor para obtener la cookie. Luego se transmitirá con el protocolo de enlace de conexión del zócalo.
¡Fácil y seguro!
En el lugar principal de archivo antes io.on ('conexión'), agregue las líneas:
io.set('origins', 'yoursite.com:*');
io.on('connection', function (socket) {
sí lo hace. He implementado socket.io de dominio cruzado para probar si funciona.
<script src="http://your-nodejs-domain.com:3000/public/js/jquery.js"></script>
<script src="http://your-nodejs-domain.com:3000/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://your-nodejs-domain:3000');
$(document).ready(function(){
socket.on('test message', function(msg){
console.log("Got the message: " + msg);
});
});
</script>
Eso debería funcionar bien.
Tengo el mismo problema, pero no es wotk .. –
podría dar el código completo de la aplicación server.js – zero8
** Versión Socket.IO -> 1.3.7 **
¿Es posible el uso de Socket.Io de manera dominios? Sí, absolutamente.
Si es así, ¿cómo?
Opción 1: Uso de la Fuerza de WebSockets única
Por defecto, websockets son dominios. Si fuerza a Socket.io a usarlo solo como medio para conectar el cliente y el servidor, está listo para funcionar.
lado del servidor
//HTTP Server
var server = require('http').createServer(app).listen(8888);
var io = require('socket.io').listen(server);
//Allow Cross Domain Requests
io.set('transports', [ 'websocket' ]);
lado del cliente
var connectionOptions = {
"force new connection" : true,
"reconnectionAttempts": "Infinity", //avoid having user reconnect manually in order to prevent dead clients after a server restart
"timeout" : 10000, //before connect_error and connect_timeout are emitted.
"transports" : ["websocket"]
};
var socket = io("ur-node-server-domain", connectionOptions);
Eso es todo. ¿Problema? No funcionará en navegadores (para clientes) que no admitan websockets. Con esto matas casi la magia que es Socket.io, ya que gradualmente comienza con una larga encuesta para actualizar más tarde a websockets (si el cliente lo admite).
Si estás 100% seguro de que todos tus clientes accederán con Navegadores compatibles con HTML5, entonces estás listo para empezar.
Opción 2: Permitir CORS en el lado del servidor, deje que Socket.io controle si usar websockets o largo sondeo.
Para este caso, solo necesita ajustar la configuración del lado del servidor. La conexión del cliente es la misma de siempre.
lado del servidor
//HTTP Server
var express=require('express');
//Express instance
var app = express();
//ENABLE CORS
app.all('/', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
Eso es todo. Espero que ayude a alguien más.
Usted señor, son el jefe! – tanwaniniranjan
@tanwaniniranjan contento de que pueda ayudarte^_^(aunque yo soy la 'jefa', jeje). – Chayemor
jeje, ¡bien! Usted señora, es el jefe :) – tanwaniniranjan
- 1. conexión entre dominios de WebSocket causando una NS_ERROR_DOM_SECURITY_ERR
- 2. Escalado socket.io entre servidores
- 3. Comunicación iframe entre dominios
- 4. Cookies entre dominios
- 5. ¿Solicitud JSON entre dominios?
- 6. AJAX problema entre dominios
- 7. Conexión de cliente a servidor utilizando Socket.io
- 8. Diferencia entre socket.io y node.js
- 9. ¿Cómo rastrear usuarios entre dominios?
- 10. Faye en Heroku: Problemas entre dominios
- 11. Cómo analizar XML entre dominios en jQuery?
- 12. Restricción en el dominio al usar socket.io?
- 13. Cómo simular una falla de conexión en Socket.IO
- 14. Solicitudes AJAX entre dominios con IE9
- 15. ¿Cómo puedo hacer postMessage entre dominios?
- 16. uso de formularios de autenticación entre dominios
- 17. ¿Cuál es la diferencia entre engine.io y socket.io?
- 18. Incremento de la conexión máxima a node.js/socket.io
- 19. Silverlight servicio WCF entre dominios Pregunta
- 20. ¿Enviando credenciales con mensajes entre dominios?
- 21. ¿Cómo hacer comunicación entre dominios entre JavaScript y Flash?
- 22. Nowjs vs Socket.io
- 23. Captura de un error JSONP en una solicitud entre dominios
- 24. Leer cookies entre dominios (Cross-Sub-Domain) en ColdFusion (HTTPS)
- 25. Llamadas AJAX entre dominios en Safari y Chrome
- 26. Parámetros adicionales con socket.io
- 27. socket.io - XHR polling vs flashsocket y websocket
- 28. Crear conexión entre dos computadoras en python
- 29. ¿Cerrar el servidor de socket en socket.io?
- 30. NodeJS + Socket.io conexiones cayendo/reconectando?
En realidad tengo algunos problemas con las conexiones socket.io de Cross Domain. Cuando socket.io revierte a XHR-Polling/Ajax, socket.io intenta realizar solicitudes al dominio actual /socket.io/1, esto provoca un can not '*** onClose ***' en *** null ** *. Buscar en Google este error trae un par de problemas de github, pero nada que se aplique a mi situación (** ya que creo que es un problema de configuración, no un error **). –
Esta respuesta es muy anticuada. Los navegadores implementan protecciones del mismo origen en webSockets como lo hacen para las llamadas Ajax. Si desea que se permita una conexión cross origin socket.io, debe habilitarla explícitamente en su servidor socket.io. – jfriend00
El enlace está muerto. –