IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> webrtc自建信令服务器实现消息聊天 -> 正文阅读

[网络协议]webrtc自建信令服务器实现消息聊天

第三章 webrtc自建信令服务器实现消息聊天

一、主要内容:
1、显示人员进入、离开房间信息
2、实现多人聊天,消息展示
3、记录聊天室人数
二、直接上代码
chat.html源代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ChatRoom</title>
</head>
<body>
    <div align="center">
        <table>
            <tr>
                <td>
                    <label>用户名:</label>
                    <input id = "username">
                </td>
            </tr>
                <td>
                    <label>房间号:</label>
                    <input id = "room">
                </td>
            <tr>
                <td>
                    <button id="conn">进入房间</button>
                    <button id="leave">离开房间</button>
                </td>
            </tr>
            <tr>
                <td>
                    <textarea style="width: 400; height: 100%;"
                    id="msglist" rows="10"></textarea>
                </td>
            </tr>
            <tr>
                <td>
                    <input id="msg">
                    <button id="send">发送</button>
                </td>
            </tr>
        </table>
    </div>
    <script src="socket.io.js"></script>
    <script src="chat.js"></script>
</body>
</html>

chat.js源代码

"use strict"
var unameIpt = document.querySelector("input#username")
var roomIpt = document.querySelector("input#room")
var connBtn = document.querySelector("button#conn")
var leaveBtn = document.querySelector("button#leave")
var msgListTextA = document.querySelector("textarea#msglist")
var msgIpt = document.querySelector("input#msg")
var sendBtn = document.querySelector("button#send")
var roomIpt = document.querySelector("input#room")
var socket = undefined;
var room = undefined;
var uname = undefined;
function enterSts(isEnter){
        leaveBtn.disabled = !isEnter;
        sendBtn.disabled = !isEnter;
        msgIpt.disabled = !isEnter;
        unameIpt.disabled = isEnter;
        roomIpt.disabled = isEnter;
        connBtn.disabled = isEnter;
}
function start(){
    enterSts(false);
    socket=io.connect();
    socket.on("joined",(room,uname)=>{
        enterSts(true);
        msgListTextA.value = "欢迎进入"+room+"房间"+"\n";
    });
    socket.on("otherjoined",(uname)=>{
        msgListTextA.value += uname+"进入了房间"+"\n";
    });
    socket.on("msg", (uname, msg)=>{
        msgListTextA.value += uname + ":" + msg + "\n";
    });
    socket.on("leaved",room=>{
        msgListTextA.value += "离开了" + room + "\n";
        enterSts(false);
    });
    socket.on("otherleaved", uname=>{
        msgListTextA.value += uname + "离开了" +"\n";
    })
}
function conn(){
    uname = unameIpt.value.trim();
    room = roomIpt.value.trim();
    if(uname === "" || room === "") {
        alert("请输入房间号和用户名");
        return;
    }
    socket.emit("join",room,uname);
}
function send(){
    var msg = msgIpt.value.trim();
    if (msg === "") return;
    socket.emit("msg", room, uname, msg);
    msgIpt.value = "";
}
function leave(){
    socket.emit("leave", room, uname);
}
start();
connBtn.onclick = conn;
sendBtn.onclick = send;
leaveBtn.onclick = leave;

3.httpweb.js源代码

"use strict"
var http = require("http")
var https = require("https")
var fs = require("fs")
var express = require("express")
var serveIndex = require("serve-index")
var socketIo = require("socket.io")
var log4js = require("log4js")
var logger = log4js.getLogger()
logger.level = "info"
var app = express();
app.use(serveIndex("./www"))
app.use(express.static("./www"))
var http_server = http.createServer(app)
http_server.listen(8888,"0.0.0.0")
var options = {
    key:fs.readFileSync("../cert/ssl_server.key"),
    cert:fs.readFileSync("../cert/ssl_server.pem")
};
var https_server = https.createServer(options, app)
const io = socketIo.listen(https_server)
io.on("connection", socket=>{
    logger.info("conn:" + socket.id);
    socket.on("join",(room,uname)=>{
        logger.info("join:",room+","+uname); //打印日志
        socket.join(room); //加入房间
        var myRoom = io.sockets.adapter.rooms[room];
        var users = Object.keys(myRoom.sockets).length;  //socket有多少个就有多少个人
        logger.info("room:"+room+","+users);

        socket.emit("joined",room,uname); //加入成功了
        socket.to(room).emit("otherjoined",uname); //告诉其他人xxx加入了房间
    });
    socket.on("msg", (room, uname, msg)=>{
        io.in(room).emit("msg", uname, msg);
    })
    socket.on("leave", (room, uname)=>{
        var myRoom = io.sockets.adapter.rooms[room];
        var users = Object.keys(myRoom.sockets).length;  //socket有多少个就有多少个人
        socket.leave(room);
        logger.info("room:"+room+","+(users - 1));
        socket.emit("leaved", room)
        socket.to(room).emit("otherleaved", uname);
    })
});
https_server.listen(443,"0.0.0.0")
logger.info("启动完毕。。。。")

源代码目录
源代码目录

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:15:05  更:2022-04-22 19:18:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:27:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码