Git Product home page Git Product logo

msg-system's Introduction

安装

git clone https://github.com/Tinywan/msg-system.git

解决依赖

composer install

编辑配置文件

Redis(默认)
config/RedisConfig.php
MySQL
config/DbConfig.php

开始服务

Linux
php start.php start

守护进程 php start.php start -d

Windows
start_for_win.bat

直接运行批处理文件即可,如何做成一个服务请自行谷歌

数据字典

消息事件
字段 描述
init 初始化
json 加入直播间
say 发表评论
like 点赞
close 退出
消息内容描述
字段 描述
client_id 客户端连接唯一id
msg 消息
joinTime 加入直播间时间
commentTime 评论时间
content 评论内容
roomId 直播间id
userId 用户id
userName 用户昵称

客户端页面

代码

Demo

demo-01

问题

  • 提示错误start_businessworker.php terminated and try to restart
    • 请查看Redis是否配置合适
    • 如果composer.json修改过,使用composer dump-autoload命令则重新自动生成autoload的文件

msg-system's People

Contributors

tinywan avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

qq674684107

msg-system's Issues

客户端页面代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>GatewayWorker的websocket连接</title>
</head>
<body>
<h1>WSS连接</h1>
<div class="row">
    WSS send content:<input type="text" style="height: 50px; width: 100%;" name="data" id="data">
    <p></p>
    <button id="submit" onclick="sub()">send info</button>
    <p></p>
    <div id="output"></div>
</div>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/reconnecting-websocket/1.0.0/reconnecting-websocket.min.js"></script>
<script language="javascript" type="text/javascript">
    var wsUri = "ws://127.0.0.1:7272/";
    var outputContent;
    var roomId = 'L06777';
    var userId = Math.floor(Math.random()*(10000000-999999)+999999);
    var userName = 'Tinywan';
    var $connectToken = "";

    // 把当新链接的客户端加入到当前直播间,消息类型:{"type":"join","roomId":"1002","userId":"88","userName":"userName"}
    var joinContent = {
        "type": "join",
        "roomId": roomId,
        "userId": userId,
        "userName": userName
    };

    // 初始化页面操作
    function init() {
        outputContent = document.getElementById("output");
        initWebSocket();
    }

    function initWebSocket() {
        websocket = new ReconnectingWebSocket(wsUri);
        websocket.onopen = function (evt) {
            onOpen(evt)
        };
        websocket.onclose = function (evt) {
            onClose(evt)
        };
        websocket.onmessage = function (evt) {
            onMessage(evt)
        };
        websocket.onerror = function (evt) {
            onError(evt)
        };
    }

    function onOpen(evt) {
        console.log("CONNECTED");
    }

    // 接收数据
    function onMessage(evt) {
        var data = eval("(" + evt.data + ")");
        var type = data.type || '';
        switch (type) {
            case 'init':
                // 把当新链接的客户端加入到当前直播间
                console.log('init=======>' + data.token);
                $connectToken = data.token;
                joinContent.token = $connectToken;
                websocket.send(JSON.stringify(joinContent));
                //writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data + '</span>');
                break;
            case 'join': // 加入直播间
                console.log('join=======>' + data.commentList);
                // 如果当前userUid 等于加入userId 则加载历史最新评论
                if(data.userId == userId) {
                    var listData = data.commentList;
                    $.each(listData, function (idx, obj) {
                        console.log(obj);
                        var jj = JSON.parse(obj);
                        writeToScreen(
                            '<span style="color: green;"> 【' + ' 聊天 ' + '】</span>' +
                            '<span style="color: green;"> [' + jj.userName + ']</span>' +
                            '<span style="color: #0000cc;"> (' + jj.commentTime + ')</span>' +
                            '<span style="color: black;"> ' + jj.content + '</span>'
                        );
                    });
                }
                writeToScreen(
                    '<span style="color: #0000cc;"> 【' + ' 进入 ' + '】</span>' +
                    '<span style="color: green;"> [' + data.userName + ']</span>' +
                    '<span style="color: green;"> (' + data.joinTime + ')</span>' +
                    '<span style="color: green;"> ' + data.message + '</span>'
                );
                break;
            case 'say': // 发表评论
                console.log('say========>' + data);
                writeToScreen(
                    '<span style="color: #770088;"> 【' + ' 聊天 ' + '】</span>' +
                    '<span style="color: red;"> [' + data.userName + ']</span>' +
                    '<span style="color: #0000cc;"> (' + data.commentTime + ')</span>' +
                    '<span style="color: black;"> ' + data.content + '</span>'
                );
                break;
            case 'notice': // 系统通知
                console.log('notice========>' + data);
                writeToScreen(
                    '<span style="color: red; font-weight: bold;"> 【' + ' 系统 ' + '】</span>' +
                    '<span style="color: red; font-weight: bold;"> ' + data.msg + '</span>'
                );
                break;
            case 'logout': // 用户退出
                console.log('logout=======>' + data);
                writeToScreen(
                    '<span style="color: red;"> 【' + ' 退出 ' + '】</span>' +
                    '<span style="color: red;"> (' + data.outTime + ')</span>' +
                    '<span style="color: red;"> ' + data.msg + '</span>'
                );
                break;
            default :
                console.log(data);
                break;
        }
    }

    function onError(evt) {
        console.log('<span style="color: red;">ERROR:</span> ' + evt.data);
    }

    function onClose(evt) {
        console.log("DISCONNECTED" + evt.data);
    }

    function writeToScreen(message) {
        var pre = document.createElement("p");
        pre.style.wordWrap = "break-word";
        pre.innerHTML = message;
        outputContent.appendChild(pre);
    }

    function sub() {
        var text = document.getElementById('data').value;
        // {"type":"say",,"msg":"Welcome 111111111111Live Room"}
        var sayContent = {
            "type": "say",
            "roomId": roomId,
            "userId": userId,
            "userName": userName,
            "token": $connectToken,
            "content": text
        };
        console.log(sayContent);
        websocket.send(JSON.stringify(sayContent));
    }
    window.addEventListener("load", init, false);
</script>
</body>
</html>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.