node.js - 刷新页面后套接字不工作

标签 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");
});

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

最佳答案

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

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

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

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

否则你将不得不share the session和/或找到相应的套接字。

关于node.js - 刷新页面后套接字不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10118307/

相关文章:

node.js - exec 中的“rm”(linux) 不被识别为内部或外部命令。

javascript - 如何获取 Jade 中的数据

javascript - socket.emit 不适用于移动 chrome(但它适用于隐身模式)

从C程序连接到node.js websocket服务器

mysql - 哪个更好,单端点但多个数据库查询或多个端点和单个数据库查询

node.js - 使用 supertest 测试 Express NodeJS 端点

node.js - 在discord bot (node.js) 中逐行解析

javascript - 如果我构建 NodeJS 应用程序,我需要 gulp 或 Grunt 吗?

node.js - Socket IO 使用长轮询而不是套接字

javascript - Express 和 Passport-local 中的 req.isAuthenticated() 返回 false