Nodejs - 简单的socket.io示例不会将数据推送到所有浏览器

时间:2013-09-02 03:08:53

标签: javascript jquery node.js sockets socket.io

一定是我的一些错误,我无法弄清楚如何:

[客户]

$(document).ready(function() {
    var socket = io.connect("http://localhost:8080");
    socket.on("message", function(data) {
        $("#theInput").val(data.data);
    });

    $(document).keyup(function() {
        socket.emit("message", {data: $("#theInput").val()});
    });
});

[服务器]

var express = require("express"),
    app = express(),
    server = require("http").createServer(app);
    io = require("socket.io").listen(server),
    site = require("./site");

server.listen(8080);

app.set("view engine", "jade");
app.set("views", __dirname + "/views");

app.use(express.logger("dev"));
app.use(express.bodyParser());
app.use(express.methodOverride());

//Handling sockets
txt = "";
io.sockets.on("connection", function(socket) {
    socket.on("message", function(data) {
        txt = data.data;
        socket.emit("message", {data: txt});
    });
});

我尝试做的是在$.keyup()事件上向服务器发送新数据,然后服务器应该将新输入值重新分配给全局变量txt,并将该信息推回给客户。客户端在收到从服务器推送的任何新数据时,应更改#theInput的值。这有点像打开2个浏览器,输入1,它也应该出现在另一个浏览器上。如果我只打开一个浏览器,这意味着它会接收数据并重新分配给#theInput,但是当我打开2个不同的选项卡/浏览器来测试其同步时,每当keyup事件触发时,它都能正常工作,它取代了服务器中的全局txt,我没有在这些浏览器中看到任何同步或实时。

我很新,很感激任何帮助或提示来解决问题。

其他问题:在index.jade中(想象一下,我有一个),就像在这个结构中一样:

root
|____ views
|    |_____ index.jade
|
|____ libs
|    |_____ jQuery.js
|
|server.js

从玉,我试图:

script(src="./libs/jQuery.js")

但它导致404,未找到。我突然想起我需要路由每个请求,所以也许我应该对外部库做同样的事情,所以我去了:

[server.js]

site = require("./site");
app.get("/jQuery", site.jQuery);

定义路线:

[site.js]

exports.jQuery = function(req, res) {
    res.sendfile("./libs/js/jQuery.js");
};

然后找到该文件,但发生错误:

GET http://localhost:8080/jquery-1.10.2.min.map 404 (Not Found) 

什么是jQuery.min.map?我从未遇到过这样的事情。我在互联网上搜索了所有明确的例子,但不幸的是,他们都使用快捷方式http://code.jquery.com/jquery-2.0.3.min.js来嵌入jQuery。这是有效的,是我的临时解决方案。那么无论如何都要像传统服务器那样嵌入jQuery吗?

1 个答案:

答案 0 :(得分:2)

在您的服务器程序中,将socket.emit更改为io.sockets.emit

socket.emit会将消息发送到已连接的特定套接字(客户端)。 io.sockets.emit将向所有连接的套接字(客户端)发送消息