刷新页面后套接字不起作用

时间:2012-04-12 06:15:01

标签: node.js socket.io express

我建立了一个小应用程序,我使用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请求到“/ mysegment”,我的时间套接字不能正常工作。 我的控制台上没有收到消息“是套接字工作正常(和我的消息)” 但我得到了回答“是的我得到了那个部分”  有任何建议请...

2 个答案:

答案 0 :(得分:1)

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

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

这里发生的事情是,每次任何客户端与websockets连接时,都会向所有/ mysgment POST请求添加一个新的处理程序。然后,当任何人向/ mysegment发送POST时,所有连接的客户端都将获得userData ...这可能不是您想要的。

为了简单起见,坚持使用套接字来实现一件事,而将普通的HTTP用于其他事物。

否则您必须share the session和/或找到相应的套接字。

答案 1 :(得分:0)

您可以像这样(在 scoket.io v4 中)在您的快速路由中访问套接字对象:

var socket = io.sockets.on('connection', function (socket) {
  socket.on('getUser',function(msg){
    console.log("Yes Socket work Properly "+msg);
  });
});

app.post('/mysegment',function(req,res){
  var userData = req.body;
  socket.emit('sendUser', userData);
  res.send("yes I got that segment");
});