2012-04-12 76 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和/或找到相应的套接字。