返回顶部
首页 > 资讯 > 精选 >如何用webSocket与Swoole打造一个小型聊天室
  • 807
分享到

如何用webSocket与Swoole打造一个小型聊天室

2023-06-29 06:06:52 807人浏览 安东尼
摘要

这篇文章主要介绍了如何用websocket与Swoole打造一个小型聊天室的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用WEBSocket与Swoole打造一个小型聊天室文章都会有所收获,下面我们一起来看

这篇文章主要介绍了如何用websocket与Swoole打造一个小型聊天室的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用WEBSocket与Swoole打造一个小型聊天室文章都会有所收获,下面我们一起来看看吧。

前端页面代码:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>打工人聊天室</title>   <!--需要引入jq 文件--></head><style>    .content {        height: 400px;        max-width: 400px;        overflow: auto;        border-radius: 5px;        border: 1px solid #f0f0f0;    }</style><body>            <div id="content" class="content">                <p>聊天区域</p>            </div>            你好打工人:<samp id="nickname">昵称</samp> <br>            本次连接FD: <samp id="fd-samp"></samp> <br>            <input type="text" id="msg">            <input type="hidden" id="fd" value="">            <button id="send" onclick="send()">发送</button></body></html>

js 代码:

服务器信息回执时,会有第一次连接回执,还是服务端发送消息回执的状态区别,通过 msgType 来分辨,如果是第一次连接的回执消息,则把 FD 做一个页面留存,并不显示在聊天消息区,如果收到的是消息回执,就直接显示到聊天消息区。

还有就是,前后端相互通信发送的东西,都是字符串性质最优,我前端处理的方法是先组合成一个对象,然后转 JSON 串。

<script>    //滚动条最底部    function scrolltest() {        var div = document.getElementById("content");        div.scrollTop = div.scrollHeight;    }    var wsServer = 'ws://127.0.0.1:9502/websocket';    var websocket = new WebSocket(wsServer);    var nickname = Math.random().toString(36).substr(2);    thisFd = '';    $('#nickname').html(nickname);    //点击发送    function send() {        var msg = $('#msg').val();        var data = {            'nickname': nickname,            'fd': thisFd,            'data': msg        }        //生成json 方便后台接收以及使用        var data = JSON.stringify(data);        websocket.send(data);        //然后清空        $('#msg').val('');    }    //链接成功    websocket.onopen = function (evt) {        var data = {            'msgType': 'open'        }        var data = JSON.stringify(data);        $("#content >p:last-child").after('<p> 服务器已连接,开始聊天吧 </p>');        websocket.send(data);    };    //链接断开    websocket.onclose = function (evt) {        $("#content >p:last-child").after('<p> 服务器已断开,请重新连接 </p>');    };    //收到服务器消息    websocket.onmessage = function (evt) {        //握手成功后,会接受到服务端返回的fd ,msgType = 1        //字符串格式化成json        var data = eval('(' + evt.data + ')');        // console.log(evt.data);        switch (data.msgType) {            case 1:                thisFd = data.fd;                $('#fd-samp').html(thisFd);                $('#fd').val(thisFd);                break;            case 2:                if (data.nickname == nickname) {                    data.nickname = '我';                }                $("#content >p:last-child").after('<p>' + data.nickname + ' 在 ' + data.time + ' 说:<br>' + data.data + '</p>');                //接收到消息自动触底                scrolltest();                break;        }    };    //服务器异常    websocket.onerror = function (evt, e) {        $("#content >p:last-child").after('<p> 服务器异常 </p>');    };    //心跳,本次新增    function heartbeat() {        var data = {            'msgType': 'ping',        }        //生成json 方便后台接收以及使用        var data = JSON.stringify(data);        websocket.send(data);    }    //30 秒一次    setInterval(heartbeat, 30000);</script>

服务端代码
协程,都需要在 Co\run(function () {}) 里。

<?PHP    //定义获取当前的id函数    function getObjectId(\Swoole\Http\Response $response) {        if (php_VERSION_ID < 70200) {            $id = spl_object_hash($response);        } else {            $id = spl_object_id($response);        }        return $id;    }    Co\run(function () {        $server = new Co\Http\Server('127.0.0.1', 9502, false);        $server->set([            'heartbeat_idle_time'      => 600, // 表示一个连接如果600秒内未向服务器发送任何数据,此连接将被强制关闭            'heartbeat_check_interval' => 60,  // 表示每60秒遍历一次        ]);        $server->handle('/websocket', function ($request, $ws) {            $ws->upgrade();            global $wsObjects;            $objectId = getObjectId($ws);            $wsObjects[$objectId] = $ws;            while (true) {                $frame = $ws->recv();                if ($frame === '') {                    unset($wsObjects[$objectId]);                    $ws->close();                    break;                } else if ($frame === false) {                    echo 'error : ' . swoole_last_error() . "\n";                    break;                } else {                    if ($frame->data == 'close' || get_class($frame) === Swoole\WebSocket\CloseFrame::class) {                        unset($wsObjects[$objectId]);                        $ws->close();                        return;                    }                    //格式化接收到json                    $data = json_decode($frame->data);                    switch ($data->msgType){                        case 'open':                            //链接第一次                            $data = json_encode([                                'fd' => $objectId,                                'msgType' => 1  //代表第一次连接,前端处理fd                            ]);                            $ws->push($data);                            break;                        case 'ping':                            //接收到心跳 不作回复//                            echo  $data->msgType;                            break;                        default :                            // 原基础上不动,增加一些自定义                            $data->msgType = 2; //代表服务器端回复                            $data->time = date('Y-m-d H-i-s');                            $data = json_encode($data);                            foreach ($wsObjects as $obj) {                                $obj->push($data);                            }                    }                }            }        });        $server->start();    });

代码齐全之后,接下来就只需要在控制台执行以下 PHP 文件就行。

然后前台直接访问你的网站地址,我的是本地 127.0.0.1

多开几个窗口模拟多个用户,然后发送消息测试即可

关于“如何用webSocket与Swoole打造一个小型聊天室”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“如何用webSocket与Swoole打造一个小型聊天室”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何用webSocket与Swoole打造一个小型聊天室

本文链接: https://lsjlt.com/news/323103.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何用webSocket与Swoole打造一个小型聊天室
    这篇文章主要介绍了如何用webSocket与Swoole打造一个小型聊天室的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用webSocket与Swoole打造一个小型聊天室文章都会有所收获,下面我们一起来看...
    99+
    2023-06-29
  • 如何利用Python打造一个多人聊天室
    这篇文章主要介绍如何利用Python打造一个多人聊天室,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、实验名称建立聊天工具二、实验目的掌握Socket编程中流套接字的技术,实现多台电脑之间的聊天。三、实验内容和要求...
    99+
    2023-06-22
  • Django使用channels + websocket打造在线聊天室
    目录什么是websocket? 第一步 准备工作 第二步 编写聊天室页面 第三步 编写后台websocket路由及处理方法 第四步 运行看效果 小结 Channels是Dja...
    99+
    2024-04-02
  • 如何用JavaEE7、Websockets和GlassFish4打造聊天室(一)
    今天就跟大家聊聊有关如何用JavaEE7、Websockets和GlassFish4打造聊天室(一),可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java EE 7已经在今年正式发布...
    99+
    2023-06-17
  • 如何利用html5的websocket实现websocket聊天室
    这篇文章主要讲解了“如何利用html5的websocket实现websocket聊天室”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用html5的we...
    99+
    2024-04-02
  • 利用Python打造一个多人聊天室的示例详解
    一、实验名称 建立聊天工具 二、实验目的 掌握Socket编程中流套接字的技术,实现多台电脑之间的聊天。 三、实验内容和要求 vii.掌握利用Socket进行编程的技术 viii.必...
    99+
    2024-04-02
  • 怎么在HTML5中使用WebSocket实现一个聊天室
    本篇文章给大家分享的是有关怎么在HTML5中使用WebSocket实现一个聊天室,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1)注册注册要处理几个事情,分别是注册完成后获取当...
    99+
    2023-06-09
  • 如何使用JavaScript与Node.js打造一款聊天App
    这篇文章将为大家详细讲解有关如何使用JavaScript与Node.js打造一款聊天App,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。聊天是我们人与人交流...
    99+
    2024-04-02
  • 如何使用Go语言开发Websocket聊天室
    如何使用Go语言开发Websocket聊天室Websocket是一种实时通信协议,通过建立一次连接,可以在服务器和客户端之间进行双向通信。在开发聊天室时,Websocket是一个非常好的选择,因为它可以实现实时消息交流,并且能够提供高效的性...
    99+
    2023-12-14
    Go语言 websocket 聊天室
  • Node.js websocket如何使用socket.io库实现实时聊天室
    这篇文章主要介绍Node.js websocket如何使用socket.io库实现实时聊天室,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!认识websocketWebSocket p...
    99+
    2024-04-02
  • 如何使用C#基于WebSocket实现聊天室功能
    这篇文章将为大家详细讲解有关如何使用C#基于WebSocket实现聊天室功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ServerHelper:using System;using ...
    99+
    2023-06-29
  • 怎么在Django中使用channels和websocket实现一个在线聊天室
    本篇文章为大家展示了怎么在Django中使用channels和websocket实现一个在线聊天室,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Channels是Django团队研发的一个给Djan...
    99+
    2023-06-15
  • 如何使用WebSocket网络通信协议开发聊天室
    本篇内容主要讲解“如何使用WebSocket网络通信协议开发聊天室”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用WebSocket网络通信协议开发聊天室...
    99+
    2024-04-02
  • 如何使用WebSocket+SpringBoot+Vue搭建简易网页聊天室
    今天小编给大家分享一下如何使用WebSocket+SpringBoot+Vue搭建简易网页聊天室的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2023-07-06
  • 在Java项目中利用continue与break制作一个聊天室小程序
    在Java项目中利用continue与break制作一个聊天室小程序?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现方法如下:package com.swif...
    99+
    2023-05-31
    java continue break
  • 如何利用C++实现一个简单的聊天室程序?
    如何利用C++实现一个简单的聊天室程序?在信息时代,人们越来越注重网络交流。而聊天室作为一种常见的沟通工具,具有实时性和交互性的特点,被广泛应用于各个领域。本文将介绍如何利用C++语言实现一个简单的聊天室程序。首先,我们需要建立一个基于客户...
    99+
    2023-11-04
    C++ 实现 聊天室程序
  • 如何使用MySQL和Java实现一个简单的聊天室功能
    要使用MySQL和Java实现一个简单的聊天室功能,你需要进行以下步骤:1. 创建数据库和表:使用MySQL创建一个数据库,并在该数...
    99+
    2023-10-10
    MySQL
  • 如何用Node.JS打造一个恶劣天气实时预警系统
    这篇文章主要讲解了“如何用Node.JS打造一个恶劣天气实时预警系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用Node.JS打造一个恶劣天气实时预警系统”吧!序言:这几日,无论是打...
    99+
    2023-06-25
  • 聊天素材支持小程序打开如何使用
    本篇内容介绍了“聊天素材支持小程序打开如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  功能介绍  微信聊天内素材(图片、视频和we...
    99+
    2023-06-26
  • 如何用Python做一个智能聊天机器人
    这期内容当中小编将会给大家带来有关如何用Python做一个智能聊天机器人,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。伴随着自然语言技术和机器学习技术的发展,越来越多的有意思的自然语言小项目呈现在大家的眼...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作