node.js socket.io的使用

使用socket.io写了一个聊天室,在数据传输中出现了一点点问题。

问题,有时候数据需要广播到整个局域网,但有时候又只想发给某一个用户,需要怎么实现

var http = require("http").createServer(handler);
var host = 8000;
var io = require('socket.io').listen(http);

这是我建立的一个socket监听

io.sockets.on('connection', function (socket) {
    //console.log(socket.id);
    console.log('一个用户上线了');
    io.emit("server msg", "hello");
    socket.on('disconnect', function () {
        console.log('一个用户下线');
    });

    socket.on("send", function (msg) {
        console.log(msg);
        //广播出去
        io.emit("message", msg);
    });
});

这里是对应的响应

一开始我只是想实现某一个用户上线就提示一句“hello”
但没想到这样做了之后发现只有有某一个用户上线,其他用户全都收到这个信息,很明显就是广播到全局。
后来才发现代码有点问题

io.emit("server msg", "hello");

在这一块全局io调用的on方法有一个回调的变量socket,这个回调变量其实就是对应服务器与某一台机器的连接,而如果直接使用io的话因为是全局的会广播到所有的机器上。
所以这里应该改成

socket.emit("server msg", "hello");

同时今天还发现了另外的问题,在聊天室中我使用一个input去接收用户的输入
后来不知道为什么抽风在input跟对应的提交按钮外围加上一个

标签,结果导致点击submit按钮但是一直没有响应,一直处于等待响应的状态。
后来才发现因为如果在button外围加了form标签,对应的就需要有action去处理,而使用onclick事件会被忽略了。

你可能感兴趣的:(node.js socket.io的使用)