博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node.js 基于socket.io的聊天室
阅读量:6273 次
发布时间:2019-06-22

本文共 1399 字,大约阅读时间需要 4 分钟。

hot3.png

聊天室主要是某个客户端浏览器给服务发送一条消息,服务器接收到消息时,发送到各个客户端浏览器。

明显需要主要2个部分,服务器端逻辑处理文件和客户端消息逻辑及操作界面(即静态html页面),github给了很好的demo,不过我没有仿照它,而是看着文档简单的写了几行代码,主要实现服务器和客户端的通信,了解socket.io的主要方法。

服务器端的要创建http服务,并设置监听端口,供客户端连接。

var app=require('http').createServer(handler);

var io=require('socket.io')(app);
var fs=require('fs');
app.listen(8080);
function handler(req,res) {
    fs.readFile(__dirname+'/index.html',function(err,data) {
        if (err) {
            res.writeHead(500);
            return res.end('Error loading index.html');
        }
        res.writeHead(200);
        res.end(data);

    })

}

当客户端连接到服务器成功后,触发connection事件,在此事件处理消息的发送。

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

    socket.on('msg',function(data) {//服务器接收浏览器发送的聊天内容
        console.log(data);
        io.emit('msgView',{msg:data});//服务器接收到的聊天内容发送到各个客户端
    })
});

注意红色代码行,是io.emit,不是io.socket.emit,io.socket.emit为当前连接的client

 

客户端处理逻辑

连接到服务器,点击发送时,获取输入内容发送到服务器。服务器接收到消息后会通知各个客户端消息内容,各个客户端接收到消息后在div中显示。

 

引用io.socket的js文件

//连接到服务器

var socket = io('http://localhost:8080');

    var btnSend = document.querySelector("#btnSend");
    btnSend.onclick = sendFun;‘

    //发送聊天内容到服务器

    function sendFun() {
        var msg = document.querySelector("#txtMsg").value;
        socket.emit('msg',msg);
    }

 

//监听服务发送的消息

    socket.on('msgView', function(data) {
                var box = document.querySelector("#box");
                var newItem=document.createElement("p");
                newItem.innerHTML=data.msg;        
                box.appendChild(newItem);
            });

 

 

就是这么简单。

io.socket的命名空间和join方法可创建多个聊天室。

转载于:https://my.oschina.net/wsh2016/blog/776526

你可能感兴趣的文章
Android权限列表
查看>>
Linux中的网络监控命令
查看>>
360项目-07
查看>>
使用Nginx进行TCP/UDP端口转发
查看>>
读书笔记2(Effective java)
查看>>
[bat]批量替换文件内容
查看>>
Java代码到字节码——第一部分
查看>>
Linux挂载安装VMware tool
查看>>
Android中利用ViewFliper实现屏幕切换效果
查看>>
群发quota报警邮件脚本
查看>>
C语言进阶【文件】常用文件操作函数详解(一)
查看>>
(四)基于Spring Cloud Fegin的跨服调用
查看>>
博为峰Java技术文章 ——JavaEE Hibernate实例状态
查看>>
RFC4291, IPv6 的单播地址到底是哪几种?
查看>>
Linux(centos)系统各个目录的作用详解 推荐
查看>>
zabbix监控进程与端口
查看>>
Libvirsh 问题:GLib-WARNING **: gmem.c:483: custom memory allocation vtable not supported
查看>>
COALESCE函数
查看>>
Ext.require callback 不执行
查看>>
面试题:连续子数组的最大和
查看>>