0

0

html5中关于socket.io实现一个聊天室的示例代码

黄舟

黄舟

发布时间:2017-10-23 10:07:45

|

2123人浏览过

|

来源于php中文网

原创

html5中关于socket.io实现一个聊天室的示例代码




    
    1
    
    


欢迎来老王聊天室

在线用户

    在线人数 0

    后台node

    ChartAI
    ChartAI

    AI驱动的图表生成工具

    下载
    let express = require('express');
    let path = require('path');
    let app = express();
    app.get('/',function(req,res){
        res.sendFile(path.resolve('index.html'));
    });
    let server = require('http').createServer(app);
    //socket.io是依赖http服务器
    let io = require('socket.io')(server);
    //声明一个对象,保存所有的客户端用户名和它们的socket对应关系
    let clients = {};
    //监听客户端的连接,当连接到来的时候执行此回调函数
    io.on('connection',function(socket){
        //在函数的内部声明一个变量,叫username
        let username;
        //监听客户端的发过来的消息,当消息发过来的时候执行回调函数
        socket.on('message',function(data){
            if(username){
                //判断是公聊还是私聊
                let reg = /@([^ ]+) (.+)/;
                let result = data.match(reg);
                if(result){//如果result有值则匹配上了
                    //此处是私聊
                    let toUser = result[1];
                    let content = result[2];
                    clients[toUser] && clients[toUser].send({
                        username,
                        content,
                        createAt:new Date()
                    });
                }else{//没匹配上
                    //正常发言,向所有的客户端进行广播
                    io.emit('message',{
                        username,content:data,createAt:new Date()
                    });
                }
            }else{
                username = data;//把这个消息当成用户名
                //关联起来
                clients[username]= socket;
                //向所有的客户端广播说有新的用户加入聊天室
                io.emit('message',{
                    username:'系统',content:`欢迎 ${username} 加入聊天室`,createAt:new Date()
                });
                //事件的名字可以自定义
                io.emit('user-added',username);
            }
        });
        //监听客户端发过来的请求,把用户数组返回
        socket.on('users',function(){
            let userList = Object.keys(clients);
            socket.emit('userList',userList);
        });
    });
    server.listen(8080);
    
    /**
     * 1.实现匿名聊天
     *   1. 在客户端里连接上服务器
     *   2. 给发送按钮绑定点击事件,当点击此按钮的时候先获取文本框的内容,把文本框的内容发送到后台
     *   3. 后台服务器把此消息广播给所有的客户端。
     *   4. 所有的客户端收到消息后把此消息在ul列表里显示出来
     * 2.实现具名聊天
     *   1. 当此用户第一次向服务器发消息的时候
     *   2. 服务器会判断此客户端的用户名是否设置过,如果没设置的话就把这个消息当成用户名,以后再发消息的话都会以这个作为用户名,如果设置过了就是正常发言
     * 3. 私聊
     *   1. 点击某个在线用户,点击后会在输入框里出现  @xxx yyy
     *   2. 服务收到私聊的请求后会找到xxx对应的客户端向他单个发消息
     *   3
     *
    */

    相关文章

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    高德地图升级方法汇总
    高德地图升级方法汇总

    本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

    65

    2026.01.16

    全民K歌得高分教程大全
    全民K歌得高分教程大全

    本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

    121

    2026.01.16

    C++ 单元测试与代码质量保障
    C++ 单元测试与代码质量保障

    本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

    33

    2026.01.16

    java数据库连接教程大全
    java数据库连接教程大全

    本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

    39

    2026.01.15

    Java音频处理教程汇总
    Java音频处理教程汇总

    本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

    19

    2026.01.15

    windows查看wifi密码教程大全
    windows查看wifi密码教程大全

    本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

    85

    2026.01.15

    浏览器缓存清理方法汇总
    浏览器缓存清理方法汇总

    本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

    19

    2026.01.15

    ps图片相关教程汇总
    ps图片相关教程汇总

    本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

    11

    2026.01.15

    ppt一键生成相关合集
    ppt一键生成相关合集

    本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

    47

    2026.01.15

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    如何进行WebSocket调试
    如何进行WebSocket调试

    共1课时 | 0.1万人学习

    HTML5/CSS3/JavaScript/ES6入门课程
    HTML5/CSS3/JavaScript/ES6入门课程

    共102课时 | 6.7万人学习

    HTML+CSS基础与实战
    HTML+CSS基础与实战

    共132课时 | 9.6万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号