2012-09-30 93 views
3

我創建了一個express express 3應用程序,並安裝了socket.io。 在app.js即時通訊一個冒落消息:Socket.io和Express 3

io.sockets.on('connection', function(socket) { 
    socket.emit('init', { msg: 'Welcome'}); 
}); 

在服務器端我寫道:

<!DOCTYPE html> 
<html> 
    <head> 
    <title><%= title %></title> 
    <link rel='stylesheet' href='/stylesheets/style.css' /> 
    <script src='/socket.io/socket.io.js' /> 
    <script> 
     var socket = io.connect('http://127.0.0.1:3000'); 
     socket.on('init', function (data) { 
      console.log(data.msg); 
     }); 
    </script> 
    </head> 
    <body> 
    <h1><%= title %></h1> 
    <p>Welcome to <%= title %></p> 
    </body> 
</html> 

如果我運行app.js它應打印「歡迎光臨」的控制檯上,但它不是priting任何東西。我檢查/socket.io/socket.io.js是否被接受,並且確實如此。

當運行應用程序,我得到:

info - socket.io started 
Express server listening on port 3000 
GET/200 28ms - 472 
GET /stylesheets/style.css 200 163ms - 110 
    debug - served static content /socket.io.js 

我缺少的東西?我跟着socket.io網頁的例子,但似乎服務器運行良好...也許在客戶端?

編輯:我也在客戶端嘗試var socket = io.connect('http://127.0.0.1', { port: 3000 });,並且還從主體運行所有套接字客戶端。

在io.sockets.on事件中做一個console.log沒有提供任何內容......所以「連接」永遠都不會到達。

回答

1

添加index.jade文件到我

之前張貼的例子

server.js

var app = require('express')() 
    , http = require('http') 
    , server = http.createServer(app) 
    , io = require('socket.io').listen(server) 

server.listen(3000) 
io.set('loglevel',10) // set log level to get all debug messages 
io.on('connection',function(socket){ 
    socket.emit('init',{msg:"test"}) 
}) 
app.get('/',function(req,res){ 
    res.render('index.jade') 
}) 

/views/index.jade

doctype html 
html 
    head 
    script(src="/socket.io/socket.io.js") 
    script. 
     var sockets = io.connect() 
     sockets.on('init',function(msg){ 
     alert(msg.msg) 
     }) 
11

app.js:

var express = require('express') 
    , routes = require('./routes') 
    , http = require('http') 
    , path = require('path'); 

var app = express(); 
var server = http.createServer(app) 

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(app.router); 
    app.use(express.static(path.join(__dirname, 'public'))); 
}); 

app.get('/', routes.index); 

server.listen(app.get('port'), function(){ 
    console.log("Express server listening on port " + app.get('port')); 
}); 

var io = require("socket.io").listen(server) 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
}); 

的index.html:

<script> 
    var socket = io.connect(); 
    socket.on('news', function (data) { 
     console.log(data); 
    }); 
</script> 

在瀏覽器的控制檯,您應該看到包含 「你好」 的對象: 「世界」。