Socket.io – ReferenceError: io no está definido

Estoy escribiendo una aplicación para Android 2.3.5 (que también será compatible con iOS). Deseo transferir datos de HTML / Javascript de la aplicación a un programa Python en un servidor (que utiliza el motor Twisted para recuperar los datos).

He intentado muchas cosas y he visto varios foros, respuestas, tutoriales y páginas web, incluyendo la mayoría de ellos aquí, y no puedo encontrar una respuesta. Aquí está el Javascript relevante que tengo en mi archivo index.html:

<script src="socket-lib/socket.io.js"></script> <script type="text/javascript" charset="utf-8"> function sendData() { try { var socket = io.connect('http://mywebsite.com:12345'); socket.on('connect', function(data) { socket.send('Hello.'); socket.on('message', function (msg) { socket.send('This is where I send data?'); }); }); } catch(err) { alert('ERROR: socket.io encountered a problem:\n\n' + err); } } // end of sendData 

Si usted no puede decir, todavía estoy bastante confundido cómo esto trabaja; Ni siquiera puedo probar nada. El error que sigue apareciendo es ReferenceError: io is not defined . Algunos sitios utilizan algo como var io = require('socket.io'); . Pero entonces resulta en el mismo error: ReferenceError: require is not defined .

Puse la carpeta socket-lib en assets / www, donde cualquier otra fuente Javascript debería ir. Esto es también donde está el archivo index.html. Muchos sitios usan <script src="/socket.io/socket.io.js"></script> , pero esto no tiene sentido para mí. Muchos sitios también implican el uso de node.js, pero nunca lo veo en ninguna parte.

¿Cómo puedo hacer que esto funcione?

Modificaciones de la respuesta:

Lo probé en Chrome, y me está dando un Uncaught ReferenceError: require is not defined para el archivo socket.io.js. Así que decido a la fuente en require.js justo antes de ella. Entonces da el error Uncaught Error: Module name "socket.io-client" has not been loaded yet for context . Como no estoy usando esto, no me importa. Cuando intento la conexión, sin embargo, da el mismo io is not defined error io is not defined . Cuando lo defino como var io = require('socket.io') , el error es Error: Module name "socket.io" has not been loaded yet for context: _ http://requirejs.org/docs/errors.html#notloaded . Miré el sitio web, y no me ayuda en absoluto. Cuando intento poner "require" como argumento de función, se produce otro error: TypeError: undefined is not a function .

He encontrado la respuesta para cualquier persona que se inmensamente confundido por la horrible falta de documentación de socket.io .

No puede /socket-lib/socket.io.js ,

Debe obtener http://yourwebsite.com:12345/socket.io/socket.io.js .

El servidor automáticamente hace el resto para usted.

Lo solucioné yo mismo cambiando index.html para importar el cliente socket io de bower, primero instale el componente bower:

  bower install socket.io-client 

Entonces cambié la referencia en index.html a:

  <script src="bower_components/socket.io-client/socket.io.js"></script> 

O el archivo podría encontrarse en – lib / socket.io-client / dist / socket.io.js

Parece que su navegador no puede encontrar el archivo socket.io.js. Puede intentar abrir el archivo index.html en su computadora con Firefox + Firebug o Chrome Web Developer Tools y ver cómo se solicita el archivo .js. Por otro lado, puede comprobar los registros en el servidor web que sirve el archivo. Js si hay algún archivo no encontrado errores.

La función require sería proporcionada por, por ejemplo, RequireJS , pero aún así tendrás que configurar las rutas de acceso a tus scripts correctamente para que funcione.

Al obtener socket.io para trabajar con muchas otras bibliotecas utilizando require.js tuve el mismo error, resultó ser causado por intentar cargar el archivo socket.io.js de la misma carpeta / js que el resto de la otra Archivos.

Colocándolo en una carpeta separada, lo arregló para mí, usted puede ver el código en esta esencia pero todo lo que cambié para hacer que funcione, era esto:

en lugar de:

Socketio: 'socket.io',

Utilizar:

Socketio: '../socket.io/socket.io',

No estoy seguro de la razón de este comportamiento, pero espero que te ayude.

Me las arreglé para equivocarse a través de esto, y malgastado alrededor de una hora, en algo que resultó ser un error muy básico.

¿Cuando una función no está definida? Tales como "Unrected ReferenceError: io no está definido". ¿Eso no significa que la función está siendo "utilizada" antes de ser "creada"?

En la parte de mi archivo HTML, que "llama" a los archivos javaScript, se veía así:

 <script src='./js/playerChatter.js'></script> <!-- this one calls io --> <script src="http://localhost:2019/socket.io/socket.io.js"></script><!-- This Creates io --> 

Y lo cambié a esto

 <script src="http://localhost:2019/socket.io/socket.io.js"></script> <!-- This Creates io --> <script src='./js/playerChatter.js'></script> <!-- this on calls io --> 

Así que ahora el elemento "io", ya sea un objeto o una función … En realidad se está creando antes de que se está utilizando: D

¡Que te diviertas!

Para mí después de depurar a través de todas las sugerencias muy útiles, resultó ser simplemente que mi servidor de nodos se había detenido. Lo había estado funcionando manualmente en una ventana terminal durante el dev.

Asegúrese de que su nodo [yourservercode] .js se está ejecutando en el puerto especificado! Significado de la palabra

Yo uso jspm.

Agrega esto:

 import 'btford/angular-socket-io/mock/socket-io'; 
  • La mejor manera de implementar Socket.io en android
  • Android Nkzawa SocketIO desconectar y hacer una nueva conexión
  • Conectar cliente android a sails.js
  • Mejores prácticas de Android Socket.IO para mantener la conexión activa
  • ¿Es posible usar WebSockets o similar con una aplicación nativa de Android?
  • Comunicarse con socket.io desde android
  • Emitir mensajes socket.io en Android
  • AndroidAsync Socket.io ArrayIndexOutOfBoundsException
  • Descartar error de transporte al utilizar Nodejs + SocketIO
  • Aplicación de Android Conexión al servidor Node.js mediante Socket.io
  • Mostrar java.util.logging.Logger registra en Android Studio logcat
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.