2

我构建了使用 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");
});

这个演示工作完美但是当我刷新页面并将发布请求发送到“/mysegment”时,我的时间套接字无法正常工作。我没有在我的控制台上收到消息“是的套接字工作正常(和我的消息)”但我得到了回应“是的,我得到了那个段”任何建议请...

4

2 回答 2

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

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

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

为了简单起见,坚持使用套接字做一件事,而使用普通的 HTTP 做其他事情。

否则,您将不得不共享会话和/或找到相应的套接字。

于 2012-04-12T15:23:27.620 回答
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");
});
于 2021-05-05T21:13:11.667 回答