2012-04-12 30 views
1

我buils中,我使用socket.io和完美expressjs插座後不刷新頁面的工作

服務器端

var express = require('express'), 
sio = require('socket.io'); 
var app = express.createServer(); 

app.configure('development', function(){ 
app.use(express.bodyParser()); 
app.use(express.cookieParser()); 
    app.use(express.static(__dirname + '/')); 
    app.set('views', __dirname + '/views'); 
    app.use(express.errorHandler({dumpExceptions: true, showStack: true})); 
    app.use(app.router); 
}); 
app.listen(4000); 
var io = sio.listen(app); 

app.get('/', function (req, res) { 
    res.redirect('index.html'); 
}); 

io.sockets.on('connection', function (socket) { 

     app.post('/mysegment',function(req,res){ 
      var userData = req.body; 
      socket.emit('sendUser', userData); 
      res.send("yes I got that segment"); 
     }); 
     socket.on('getUser',function(msg){ 
      console.log("Yes Socket work Properly "+msg); 
     }); 
}); 

和index.html

var socket = io.connect(); 
socket.on('connect', function() { 
    console.log("client connection done....."); 
}); 
socket.on('sendUser', function (data) { 
    alert("On send user"); 
    socket.emit('getUser',"Hello"); 
}); 

此演示工作的小應用程序 但是當我刷新頁面 併發送post request到「/ mysegment」,我的時間套接字無法正常工作。 我沒有我的控制檯上得到消息「好的插座正常工作(和我的MSG)」 但我得到迴應「是的,我得到了段」 任何建議,請...

+0

您將post請求與套接字混淆。無論如何,你如何發送郵寄請求? – Amit 2012-04-12 07:25:32

+0

它第一次運行完美,但每當我刷新頁面刷新客戶端套接字但不是服務器端,以便服務器端的套接字不發出請求(我認爲它不能識別新生成的套接字)。 總之, 我想這樣的應用程序發射套接字每當有人發佈/ mysegment網址上的數據 – 2012-04-12 10:15:26

回答

1
io.sockets.on('connection', function (socket) { 

    app.post('/mysegment', ... 

這裏發生的事情是每次任何客戶端連接websocket時,新的處理程序被添加到所有/ mysgment POST請求中。然後,當任何人發送POST到/ mysegment,所有連接的客戶端將得到userData ...這可能不是你想要的。

爲了簡單起見,堅持使用套接字作爲一件事,而使用普通HTTP作爲其他。

否則,您將不得不share the session和/或找到相應的套接字。