webSocket+Node+Js实现在线聊天(包含所有代码)

简介: 文章介绍了如何使用WebSocket、Node.js和JavaScript实现在线聊天功能,包括完整的前端和后端代码示例。


这篇文章主要介绍了如何使用 webSocket、Node 和 Js 实现在线聊天功能。 重要亮点

💻 技术选型:使用 Node.js 搭建服务器,利用 Express 框架和 Socket.io 库实现 WebSocket 通信。

📄 实现思路:通过建立数组存储聊天记录,在页面加载时发送连接请求,发送消息时广播给其他用户,前端使用 JQ 操作 DOM。

✍ 代码示例:提供了完整的代码示例,包括服务器端和客户端的实现。

视频地址:https://live.csdn.net/v/embed/392116

一、首先我们需要创建一个index.js,写有关于node服务的逻辑代码,其中使用了express和socket。

二、这个时候,我们的node服务已经搭建好了,socket服务也启动了。

1、socket使用很简单

2、我们声明一个数组用来保存当前所有的聊天记录

3、首次进入页面的时候会主动发送socket信息

4、当我们发送消息的时候,其他人也可以收到对应的消息

5、前端使用了JQ用来操作dom,使用在线的socket连接后端的端口地址

三、输入用户名、输入要发送的文字、直接发送即可

四、对应代码

index.js

const express = require('express')
// const path = require('path')
const app = express()
let port = 3333
// app.use(express.static(path.join(__dirname, 'public')));
// app.get('/', (req, res, next) => {
//     res.writeHead(200, { 'Content-type': 'text/html;charset=utf-8' })
//     // res.end('欢迎来到express')
//     next()
// })
const server = app.listen(port, () => { console.log('成功启动express服务,端口号是' + port) })
//引入socket.io传入服务器对象 让socket.io注入到web网页服务
const io = require('socket.io')(server);
let arr = [{
    user:'系统消息',
    info:'恭喜链接websocket服务成功......'
}]
io.on('connect', (websocketObj) => {  //connect 固定的  
    console.log("====================")
    //链接成功后立即触发webEvent事件
    websocketObj.emit('webEvent', JSON.stringify(arr));
    //监听前端触发的 sendFunEvent  事件 
    websocketObj.on('sendFunEvent', (webres) => {
        console.log(webres, 'webreswebres')
        arr.push(webres)
        //触发所以的 sendFunEventCallBack 事件  让前端监听
        io.sockets.emit("sendFunEventCallBack", JSON.stringify(arr));
    })
})

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <!-- 通过script的方式引入 soctke.io -->
    <!-- //不成功就使用最新版本的 直接百度 cdn socket.io -->
    <script crossorigin="anonymous"
        integrity="sha512-xbQU0+iHqhVt7VIXi6vBJKPh3IQBF5B84sSHdjKiSccyX/1ZI7Vnkt2/8y8uruj63/DVmCxfUNohPNruthTEQA=="
        src="https://lib.baomitu.com/socket.io/4.6.1/socket.io.js"></script>
    <!-- 为了操作dom方便我也引入了jq -->
    <script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>
    <title>myWebsocket</title>
    <style>
        body {
            position: relative;
        }
        .zzzz {
            position: fixed;
            top: 20px;
            left: 20px;
        }
        .myBoxChild{
            margin-top: 60px;
        }
        .aaa{
            padding-left: 30px;
        }
    </style>
</head>
<body>
    <div class="myBox">
        <div class="zzzz">
            <input class="name" placeholder="用户名" type="text">
            <input class="inp" placeholder="请输入" type="text">
            <button onclick="sendFun()">发送</button>
        </div>
        <div class="myBoxChild"></div>
    </div>
    <script>
        //页面打开自动链接 http://localhost:3000 后端服务
        let mySocket = io("http://127.0.0.1:3333") //直接写后端服务地址
        //一直在监听webEvent 这个事件
        mySocket.on('webEvent', (res) => {
            window.alert(JSON.parse(res)[0].info)
        })
        mySocket.on('sendFunEventCallBack', (res) => {
            console.log(res, 'sendFunEventCallBackRes')
            let data = JSON.parse(res)
            let str = ''
            for (let i = 0; i < data.length; i++) {
                str += `<p class="aaa">${data[i].user}: ${data[i].info}</p>`
            }
            $('.myBoxChild')[0].innerHTML = str
        })
        //获取input的输入内容//将来传给服务器
        function sendFun() {
            if ($('.myBox .inp').val() != '') {
                mySocket.emit('sendFunEvent', {
                    info:$('.myBox .inp').val(),
                    user:$('.myBox .name').val()
                })
                setTimeout(() => {
                    $('.myBox .inp').val('')
                })
            } else {
                alert('输入字符')
                return
            }
        }
    </script>
</body>
</html>

全部代码:

webSocket+Node+Js实现在线聊天(包含所有代码)

目录
相关文章
|
24天前
|
JavaScript
原生js炫酷随机抽奖中奖效果代码
原生js随机抽奖是一个炫酷的根据数据随机抽奖的代码,该网页可进行随机抽取一个数据,页面动画高科技、炫酷感觉的随机抽奖效果,简单好用,欢迎下载!
42 3
原生js炫酷随机抽奖中奖效果代码
|
21天前
|
JavaScript C++ 容器
【Azure Bot Service】部署NodeJS ChatBot代码到App Service中无法自动启动
2024-11-12T12:22:40.366223350Z Error: Cannot find module 'dotenv' 2024-11-12T12:40:12.538120729Z Error: Cannot find module 'restify' 2024-11-12T12:48:13.348529900Z Error: Cannot find module 'lodash'
38 11
|
23天前
|
JavaScript 前端开发 中间件
JS服务端技术—Node.js知识点
本文介绍了Node.js中的几个重要模块,包括NPM、Buffer、fs模块、path模块、express模块、http模块以及mysql模块。每部分不仅提供了基础概念,还推荐了相关博文供深入学习。特别强调了express模块的使用,包括响应相关函数、中间件、Router和请求体数据解析等内容。文章还讨论了静态资源无法访问的问题及其解决方案,并总结了一些通用设置。适合Node.js初学者参考学习。
33 1
|
28天前
|
开发框架 JavaScript 前端开发
Node.js日记:客户端和服务端介绍、Node.js介绍
Node.js日记:客户端和服务端介绍、Node.js介绍
|
4天前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
29天前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍了如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤。通过这些工具,可以显著提升编码效率和代码质量。
294 4
|
1月前
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
94 6
|
27天前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码。通过安装和配置这些工具,可以确保代码风格一致,提高代码质量和可读性。
61 1
|
1月前
|
JavaScript 前端开发 开发工具
Node.js——初识Node.js
Node.js——初识Node.js
27 4