javascript - specific - socket.io express
consiguiendo que la muestra básica de socket.io funcione (1)
Tengo problemas incluso para obtener la muestra de socket.io muy básica para ejecutar. Por ejemplo, el primer ejemplo en la página de bienvenida de su sitio:
var io = require(''socket.io'').listen(80);
io.sockets.on(''connection'', function (socket) {
socket.emit(''news'', { hello: ''world'' });
socket.on(''my other event'', function (data) {
console.log(data);
});
});
en el lado del servidor y
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect(''http://localhost'');
socket.on(''news'', function (data) {
console.log(data);
socket.emit(''my other event'', { my: ''data'' });
});
</script>
en el lado del cliente. Si host.js
lado del servidor en un archivo host.js
, y el lado del cliente en un archivo client.htm
, y ejecuto npm host.js
, obtengo
info - socket.io started
warn - error raised: Error: listen EADDRINUSE
que ya no es realmente esperado. Luego, para el client.htm
(o al menos eso es lo que creo que se supone que debo hacer con él, pegándolo en un archivo client.htm), solo obtengo una pantalla en blanco. No es muy sorprendente, ya que comienza por incluir un archivo no existente /socket.io/socket.io.js
, pero incluso cambiarlo a host.js
(que supongo que se supone que es) no cambia el hecho de que yo solo obtener una pantalla en blanco ...
No tengo idea.
EADDRINUSE significa que la dirección ya está en uso por lo que no puede obtener el socket. ¿Hay algo más que se esté ejecutando en el puerto 80 en su máquina? 80 es comúnmente utilizado por los servidores web.
También puedes probarlo en algún otro puerto.
La razón por la que ve un archivo en blanco es que no se conecta al servidor de nodo (ya que no pudo obtener el socket) por lo que el evento de noticias nunca se llamará. Incluso podría conectarse al socket de cualquier otra cosa que se esté ejecutando en 80 que nunca emitirá ese evento :)
Después de resolver el conflicto del puerto, cuando ejecuta el servidor, solo debe decir:
información - socket.io comenzó
y ahora está esperando conexiones.
Asegúrese de actualizar la línea htm a su puerto. Por ejemplo, si 81:
var socket = io.connect(''http://localhost:81''); // note the :81
EDITAR: Acabo de probarlo y en el archivo htm tuve que establecer la ruta relativa al archivo socket.io.js. Después de instalarlo a través de npm, estaba aquí en mi directorio.
<script src="node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
Asegúrese de que la ruta sea relativa al archivo htm (no comienza con un /). Así es como descubrí dónde estaba el mío:
find . -name ''socket.io.js''
En Win: dir socket.io.js / s
También debe ejecutar el host con (en * nix puede necesitar sudo en el frente):
node host.js
Lo último que hice al probar la muestra fue cambiar un par de líneas en el archivo htm para poder ver un cuadro de mensaje de alerta cuando sucedió el evento:
socket.on(''news'', function (data) {
alert(JSON.stringify(data));