zoukankan      html  css  js  c++  java
  • node + h5 + websocket + koa2 实现简单的多人聊天

    服务器代码  ( 依赖于 koa2,  koa-websocket )

    /* 实例化外部依赖 */
    let Koa = require("koa2");
    let WebSocket = require("koa-websocket");
    
    /* 实例化 WebSocket, 实例化储存所有上线文数组 并分配监听的端口 */
    let app = WebSocket(new Koa());
    let ctxs = [];
    app.listen(80);
    
    /* 实现简单的接发消息 */
    app.ws.use((ctx, next) => {
        /* 每打开一个连接就往 上线文数组中 添加一个上下文 */
        ctxs.push(ctx);
        ctx.websocket.on("message", (message) => {
            console.log(message);
            for(let i = 0; i < ctxs.length; i++) {
                if (ctx == ctxs[i]) continue;
                ctxs[i].websocket.send(message);
            }
        });
        ctx.websocket.on("close", (message) => {
            /* 连接关闭时, 清理 上下文数组, 防止报错 */
            let index = ctxs.indexOf(ctx);
            ctxs.splice(index, 1);
        });
    });

    前端代码 ( 该页面可同时打开多个进行聊天 )

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <input type="text" id="content" />
        <input type="button" value="发送" id="send" />
        <input type="button" value="关闭" id="close" />
    </body>
    <script type="text/javascript">
        /* 封装 WebSocket 实例化的方法  */
        var CreateWebSocket = (function () {
            return function (urlValue) {
                if(window.WebSocket) return new WebSocket(urlValue);
                if(window.MozWebSocket) return new MozWebSocket(urlValue);
                return false;
            }
        })();
        /* 实例化 WebSocket 连接对象, 地址为 ws 协议 */
        var webSocket = CreateWebSocket("ws://localhost");
        /* 接收到服务端的消息时 */
        webSocket.onmessage = function (msg) {
            console.log("服务端说:" + msg.data);
        };
        /* 关闭时 */
        webSocket.onclose = function () {
            console.log("关闭连接");
        };
        /* 发送消息 */
        document.getElementById("send").onclick = function () {
            var str = document.getElementById("content").value;
            webSocket.send(str);
        }
        /* 关闭消息 */
        document.getElementById("close").addEventListener("click", function () {
            webSocket.close();
        });
    </script>
    </html>

     

  • 相关阅读:
    什么是 CLR
    常用的数据结构以及算法
    Array和ArrayList的异同点
    什么是CMS?
    .NET Framework3.0答疑
    C#中的委托
    C#速成之三(Quick C#)
    C#速成之五(Quick C#)
    C#速成之四(Quick C#)
    类,对象,封装,接口,多态,继承
  • 原文地址:https://www.cnblogs.com/lovling/p/7440360.html
Copyright © 2011-2022 走看看