2011-07-22 14 views
9

Pude obtener la aplicación básica del servidor socket.io ejecutándose en mi propio servidor y solicitarla directamente a través de cualquier navegador web (probé FF, cromo, y IE7, que funcionó todo).`require 'socket.io-client.js'` no funciona

Ahora, el problema viene en que el código de la muestra del cliente no funciona para mí, y me da el siguiente error en la consola JavaScript en cromo:

"Uncaught ReferenceError: require is not defined" in reference to this line of code in socket.io.js: var client = require('socket.io-client');

Esto me lleva a creer que doesn No reconozco el período de comando requerido, que parece extraño. Un par de otras cosas: tengo apache en ejecución y moví todos mis archivos socket.io a mi directorio htdocs de apache para acceder a través del puerto http 80 que se instalaron usando cygwin y la guía en: https://github.com/joyent/node/wiki/Building-node.js-on-Cygwin-(Windows)

El socket Los archivos .io también se instalaron en el directorio cygwin de mi disco c: en Windows, donde no son útiles si se accede por apache. Otro tidbit: tengo un archivo socket.io-client.js, pero cuando lo abrí para editar usando WordPad, parece dañado, con solo una línea de texto dentro: <symlink>ÿþi

Respuesta

27

La función require() es una característica de Node.js y solo funciona en el Javascript que se ejecuta en el servidor. Para incluir archivos en el navegador, que tendría que utilizar el método regular:

<script src="/socket.io/socket.io.js"></script> 

Node.js normalmente se configura de manera que el servidor socket.io se une a una instancia de servidor web, la cual es también es parte del servidor Node.js. Ejemplos de código tomadas directamente de la página socket.io "how to use", esto sería en el lado del servidor:

var app = require('http').createServer(handler) 
    , io = require('socket.io').listen(app) 
    , fs = require('fs') 
app.listen(80); 

si se utiliza como anteriormente, Node.js es el servidor que también sirve a la parte estática de la página web, y la dirección del nodo El servidor .js es la referencia para incluir scripts del lado del cliente.

Otro caso de uso es cuando el servidor web principal atiende el html estático y está intentando conectarse a una instancia de Node.js que podría estar en otra dirección u otro puerto, o en ambos. Socket.io.js no es servido por su servidor web principal. Lo sirve directamente el socket.io que se ejecuta en el servidor Node.js. Usted tiene que proporcionar navegador del cliente la dirección de los servidores Node.js para obtener el archivo Javascript socket.io lado del cliente, de esta manera:

<script src="http://nodejs.address:port/socket.io/socket.io.js"></script> 

<script> 
    var socket = io.connect('http://nodejs.address:port'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
}); 
</script> 

Como nota al margen, hay bibliotecas de Javascript que proporcionan requieren (función) son parte del cliente , verifique Javascript require on client side

+8

no me daba cuenta las socket.io.js fue servida por el servidor Node.js (en lugar de ser un recurso local) hasta que vi tu publicación aquí. Me estaba volviendo loco intentar descubrir por qué estaba obteniendo errores de sintaxis cuando hice referencia a los archivos de socket.io.js locales, y por qué la estructura del directorio no coincidía con la documentación ... de todos modos, ¡gracias por dejarlo en claro aquí! – Jeremy

0

Uso browserify para administrar todos los recursos de require() para el código del lado del navegador.

Dicho esto, yo era capaz de exigir al socket.io-cliente en mi código del lado del navegador de la siguiente manera:

var io = require('socket.io-client'); 
var $ = require('jquery'); 

var socket = io(); 
$('form').submit(function(){ 
    socket.emit('chat message', $('#m').val()); 
    $('#m').val(''); 
    return false; 
}); 
socket.on('chat message', function(msg){ 
    $('#messages').append($('&lt;li&gt;').text(msg)); 
}); 

A diferencia del siguiente fragmento usando un formato tradicional etiqueta de script encontrar en Ejemplo de github de socket.io: https://github.com/rauchg/chat-example/blob/master/index.html

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> 
<script src="http://code.jquery.com/jquery-1.11.1.js"></script> 
<script> 
    var socket = io(); 
    $('form').submit(function(){ 
     socket.emit('chat message', $('#m').val()); 
     $('#m').val(''); 
     return false; 
    }); 
    socket.on('chat message', function(msg){ 
     $('#messages').append($('<li>').text(msg)); 
    }); 
</script> 

socket.io-cliente se puede descargar en su entorno de desarrollo como un módulo nodo haciendo:

npm install socket.io-client 
Cuestiones relacionadas