javascript - real - socket io socket io js
NodeJS+socket.io: simple ejemplo de Cliente/Servidor no funciona (3)
Tomé tu ejemplo y lo dejé caer en una aplicación de nodo usando express. Su código HTML se colocó en un archivo HTML estático en público. Tu ejemplo funcionó bien. El código se muestra a continuación. Quería asegurarme de que tanto el archivo de script socket.io como el archivo HTML se estaban sirviendo correctamente.
var http = require(''http''),
io = require(''socket.io''),
express = require(''express'');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set(''views'', __dirname + ''/views'');
app.set(''view engine'', ''jade'');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + ''/public''));
});
if (!module.parent) {
app.listen(9000);
console.log("server started at %s", (new Date()).toUTCString());
console.log("listening on port %d", app.address().port);
}
// socket.io
var socket = io.listen(app);
socket.on(''connection'', function(client){
console.log("New client is here!");
client.send("hello world");
client.on(''message'', function(msg){ console.log("client has sent:"+msg); }) ;
client.on(''disconnect'', function(){ console.log("Client has disconnected"); }) ;
client.on(''disconnect'', function(){ })
});
Estoy usando NodeJS v0.4.8 y la última versión de socket.io desde
npm instala socket.io
en Ubuntu:
Linux mars 2.6.38-8-generic # 42-Ubuntu SMP Lun Abr 11 03:31:50 UTC 2011 i686 i686 i386 GNU / Linux
Desafortunadamente, el siguiente código no produce ningún resultado, ya sea en el cliente o en el servidor.
¿Alguien tiene una pista?
LADO DEL SERVIDOR
var http = require(''http''),
io = require(''socket.io''),
fs = require(''fs''),
sys = require(''sys'');
respcont = fs.readFileSync(''testclient.js'');
server = http.createServer(function(req, res){
res.writeHead(200, {''Content-Type'': ''text/html''});
res.end(respcont);
});
server.listen(8082);
var socket = io.listen(server);
socket.on(''connection'', function(client){
sys.puts("New client is here!");
client.send("hello world");
client.on(''message'', function(msg) { sys.puts("client has sent:"+msg); }) ;
client.on(''disconnect'', function() { sys.puts("Client has disconnected"); }) ;
});
LADO DEL CLIENTE
<html>
<body>
<script type="text/javascript" src="http://localhost:8082/socket.io/socket.io.js"></script>
<script>
var socket = new io.Socket(null,{port:8082,rememberTransport:true,timeout:1500});
socket.connect();
socket.on(''connect'', function() {
console.log(''connected to server'');
socket.send(''Hi Server...'');
});
socket.on(''message'', function() {
console.log(''received a message!'');
});
socket.on(''disconnect'', function() {
console.log(''disconnected from server'');
});
</script>
</body>
</html>
La salida de NodeJS (NO las llamadas a sys.puts ("...")) es:
info - socket.io inició la depuración - se solucionó la depuración estática de /socket.io.js - información autorizada por el cliente - información autorizada por handshake - handshaken b61a5c2751c1c8c8493db4b79d19e779
También (como Derrish) me gusta usar Express Framework para simplificar mi trabajo ( AWESOME :) ). Puede descargar y extraer esta muestra de http://dl.dropbox.com/u/314941/socketio.zip . Creo que ni siquiera tiene que instalar estos módulos porque los he agrupado localmente ( solo se ejecutan ) gracias a npm :).
Cómo instalar:
alfred@alfred-laptop:~/tmp/socketio$ uname -a
Linux alfred-laptop 2.6.35-28-generic #50-Ubuntu SMP Fri Mar 18 19:00:26 UTC 2011 i686 GNU/Linux
alfred@alfred-laptop:~/tmp$ wget http://dl.dropbox.com/u/314941/socketio.zip
alfred@alfred-laptop:~/tmp$ unzip socketio.zip
alfred@alfred-laptop:~/tmp$ cd socketio/
alfred@alfred-laptop:~/tmp/socketio$ node -v
v0.4.7
alfred@alfred-laptop:~/tmp/socketio$ npm -v
1.0.6
alfred@alfred-laptop:~/tmp/socketio$ node app.js
El código:
app.js:
// npm install express
// npm install socket.io
var sys = require(''sys''),
express = require(''express''),
app = express.createServer(''127.0.0.1''),
io = require(''socket.io'');
app.use(express.static(__dirname + ''/public''));
app.get(''/'', function (req, res) {
res.send(''Hello World'');
});
app.listen(3000);
var socket = io.listen(app);
socket.on(''connection'', function (client){
// new client is here!
setTimeout(function () {
client.send(''Waited two seconds!'');
}, 2000);
client.on(''message'', function () {
}) ;
client.on(''disconnect'', function () {
});
});
public / index.html:
<html>
<p id="text">socket.io</p>
<script src="socket.io/socket.io.js"></script>
<script src="jquery-1.6.1.min.js"></script><!-- Downloaded Jquery -->
<script>
$(document).ready(function(){
var socket = new io.Socket(),
text = $(''#text'');
socket.connect();
socket.on(''connect'', function () {
text.html(''connected'');
});
socket.on(''message'', function (msg) {
text.html(msg);
});
socket.on(''disconnect'', function () {
text.html(''disconnected'');
});
});
</script>
Listado de mis módulos:
alfred@alfred-laptop:~/tmp/socketio$ npm ls
/home/alfred/tmp/socketio
├─┬ [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ └── [email protected]
└── [email protected]
Módulos instalados (NO es necesario):
npm install express
npm install socket.io
El navegador mostrará:
-
socket.io
al inicio, pero probablemente no puedas ver esto porque será reemplazado porconnected
. -
connected
cuando el usuario se conecta a socket.io. - Después de 2 segundos, se mostrará
Waited two seconds!
Ejemplo de trabajo de Express 3.0 + Socket.io
servidor (app.js)
var express = require(''express'');
var app = express.createServer();
var socket = require(''socket.io'');
app.configure(function(){
app.use(express.static(__dirname + ''/''));
});
var server = app.listen(8081);
var io = socket.listen(server);
io.sockets.on(''connection'', function (socket) {
console.log("connnect");
socket.on(''disconnect'', function (socket) {
console.log("disconnect");
});
});
cliente (index.html)
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect(''http://localhost:8081'');
</script>
Puede pasar el código usando el siguiente enlace https://github.com/sreekumar-kr/Expree3.0---Socket.IO