Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用Swoole实现简单IM聊天

利用Swoole实现简单IM聊天

作者头像
北溟有鱼QAQ
发布于 2019-12-19 05:33:15
发布于 2019-12-19 05:33:15
1.6K00
代码可运行
举报
文章被收录于专栏:北溟有鱼QAQ北溟有鱼QAQ
运行总次数:0
代码可运行

利用Swoole实现一个简单的IM通讯聊天

  1. 为了大家方便理解,直接上代码,并在代码中写了详细注释
服务端代码如下
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
//创建websocket服务器并监听9501 端口
$ws = new Swoole\WebSocket\Server('0.0.0.0',9501);

//当用户连接后,执行的函数
$ws->on('open',function ($ws,$request){
    //控制台中输出
    echo "新用户 {$request->fd} 加入了\n";
    //将用户的fd存到全局变量中,并设置用户的默认昵称
    $GLOBALS['user'][$request->fd]['id'] = $request->fd;
    $GLOBALS['user'][$request->fd]['name'] = "匿名用户".mt_rand(1000,9999);
});
//当收到消息时,执行的函数
$ws->on('message',function ($ws,$data){
    //要返回的消息内容
    $mgs = $GLOBALS['user'][$data->fd]['name'].": " .$data->data;
    //循环每个在线用用户
    foreach ($GLOBALS['user'] as $user)
    {
        //向每个在线的用户推送消息
        $ws->push($user['id'],$mgs);
    }
});
//当用户断开连接时,执行的函数
$ws->on('close',function ($ws,$fd){
    //控制台中输出
    echo "用户 {$fd} 已掉线\n";
    //当用户掉线后,清除掉全局变量中的用户信息
    unset($GLOBALS['user'][$fd]);
});
//启动websocket服务
$ws->start();
前端代码如下
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div style="width: 60%;height: 100%;border: 1px solid #ccc;margin: 0 auto;">
<!--    消息显示框-->
    <div id="msg" style="width: 100%;height: 400px;text-align: center;"></div>
    <div style="text-align: center;margin-bottom: 20px;">
<!--        输入消息框-->
        <input type="text" id="text" >
<!--        发送按钮-->
        <input type="submit" onclick="send();" value="发送消息">
    </div>
</div>



<script>
    //连接websocket服务端,并创创建 WebSocket 对象
    var wsServer = "ws://106.14.40.226:9501";
    var webSocket = new WebSocket(wsServer);

    //获取消息显示div的dom元素
    var msg = document.getElementById('msg');

    //当用户连接后,简单输出一下
    webSocket.onopen = function (res) {
        console.log('连接成功');
    }
    //当收到用户消息后
    webSocket.onmessage = function (res) {
        //追加收到的消息到消息列表
        msg.innerHTML += res.data + "<br>";
        console.log(res.data);
    }
    //当关闭连接后
    webSocket.onclose = function (res) {
       console.log('服务器拒绝');
    }
    //当发生错误后
    webSocket.onerror = function (res,e) {
        console.log('error');
    }
    //点击发送按钮,实现获取输入框数据并发送
    function send() {
        var text = document.getElementById('text').value;
        webSocket.send(text);
    }
</script>
</body>
</html>
上面就展示了一个简单的IM通讯实例,运行结果如下

本文为北溟有鱼QAQ原创文章,转载无需和我联系,但请注明来自北溟有鱼QAQ https://www.umdzz.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​语音聊天程序源码——简单的聊天室搭建
安装好swoole后开始搭建 前段 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>聊天室</title> </head> <style> #set_name{ margin: auto; text-align: center; } </style> <body> <h3 style="text-align: center">亮亮的聊天室</h3> <d
nicai123
2019/10/07
3.9K0
​语音聊天程序源码——简单的聊天室搭建
【Swoole系列2.4】WebSocket服务
对于 Web 应用来说,最主流的当然就是我们之前学习过的 Http、TCP、UDP 这一类的应用。但是,最近这些年,特别是 HTML5 成为主流之后,WebSocket 应用日益丰富起来。要知道,之前我们在做后台时,如果要做消息通知之类的应用,全都是使用 JQuery 来进行 Ajax 轮询的。对于后台来说,这么做问题不大,但是如果你是要在前端页面做类似的功能,特别是一些客服功能的话,那可就费劲了。
硬核项目经理
2023/03/03
1.3K0
【Swoole系列2.4】WebSocket服务
Swoole入门到实战(一):PHP7&Swoole源码安装、玩转网络通信引擎、异步非堵塞IO场景
source FileName 作用:在当前bash环境下读取并执行FileName中的命令。 用于重新执行刚修改的初始化文档,如 .bash_profile 和 .profile 等等 注:该命令通常用命令“.”来替代 如:source /etc/profile 与 . /etc/profile是等效的
唐成勇
2019/05/26
1.8K0
swoole的task模块 应用?
如webim中发广播,发送邮件等,把这些任务丢给task进程之后,worker进程可以继续处理新的数据请求,任务完成后会异步通知worker进程告诉它此任务已经完成。 此外利用task还可以实现PHP的数据库连接池,异步队列等。
友儿
2022/09/11
2110
PHP进阶之利用Swoole实现一个简单的WebSocket多人聊天室
其实这个聊天室的DEMO我早都发到Github上了,之前学习Swoole的时候就已经练过手了
沈唁
2018/09/18
3.6K0
PHP进阶之利用Swoole实现一个简单的WebSocket多人聊天室
easyswoole实现在线聊天室功能
一 : 安装easyswoole,可参考http://www.php20.cn/article/82
仙士可
2019/12/19
2.1K0
easyswoole实现在线聊天室功能
Swoole WebSocket开启SSL支持 使用wss连接
移到Swoole安装包目录,重新编译安装,并加入openssl支持:(相关文章:Linux下源码包安装Swoole及基本使用)
码农编程进阶笔记
2021/07/20
1.6K0
Swoole WebSocket开启SSL支持 使用wss连接「建议收藏」
移到Swoole安装包目录,重新编译安装,并加入openssl支持:(相关文章:Linux下源码包安装Swoole及基本使用)
全栈程序员站长
2022/07/11
1.6K1
Swoole WebSocket开启SSL支持 使用wss连接「建议收藏」
2018年swoole实战1-初识swoole安装swooleide自动提示tcp 服务udp 服务http 服务websocket 服务
使用pecl安装swoole,安装过程中,会提示你是否需要安装某些扩展,可自主选择yes或no,如果是选择安装redis扩展,本机需要安装redis环境
章鱼喵
2018/08/02
5460
2018年swoole实战1-初识swoole安装swooleide自动提示tcp 服务udp 服务http 服务websocket 服务
《三》Swoole WebSocket 的应用
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。
新亮
2019/05/28
9090
《三》Swoole WebSocket 的应用
用swoole+websocket和redis实现web一对一聊天
Redis 实现每个连接websocket的服务都唯一绑定一个用户。通过 用户账号 = websocket fd 存到redis中。
程序猿的栖息地
2022/04/29
5570
用swoole+websocket和redis实现web一对一聊天
利用Swoole实现服务器通过WebSocket主动向浏览器推送数据
WebSocket 协议是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信,允许服务器主动发送信息给客户端。
魏杰
2022/12/23
9820
Swoole v4.7 版本新特性预览之 onDisconnect 事件回调
在之前的版本中可能有这样一种情况,在 WebSocket 服务器中无法在 close 事件回调中区分该 fd 是否为 WebSocket 连接,例如以下代码:
沈唁
2021/06/25
5850
微信小程序+php实现即时通讯聊天功能
Github:https://github.com/swoole/swoole-src/tags
黄啊码
2022/05/10
2.2K0
微信小程序+php实现即时通讯聊天功能
2018年swoole实战2-异步非阻塞投递任务服务端客户端启动服务代码解析
项目中,总有一些场景会触发耗时比较长的行为。如:用户更新了文章,触发推送消息给此用户的所有粉丝,如果一个用户有10000个粉丝,用同步阻塞的方式来实现,肯定会被吐槽死,这种场景必须用非阻塞的方式实现,让用户无感知。
章鱼喵
2018/08/02
6780
2018年swoole实战2-异步非阻塞投递任务服务端客户端启动服务代码解析
Swoole跟thinkphp5结合开发WebSocket在线聊天通讯系统教程
这里的路径,是因为我绑定了home模块为默认模块,tp5默认情况是:php public/index.php index/Websocket/start)
猿哥
2019/03/29
1.9K0
Swoole跟thinkphp5结合开发WebSocket在线聊天通讯系统教程
视频 | 一步步教你操作websocket通知案例
websocket通知流程 解析 我们不能保证用户B和用户A都处于连接状态,但是通常情况下,用户B至少是连接状态,用户A不一定跟server保持连接; 任一用户都不止对应一个客户端。换言之,用户A和用户B都可能打开了多个tab页,对于一个tab页,就会有一个独立的fd标识,我们这里认为任一用户只有最新的fd有效,或者你可以认为用户所有的tab页的连接都有效; 因为没有用户系统,我们以get传递的参数uid为标识,uid=100视为用户A,uid=101视为用户B; 我们模拟的tab页包将会包含一个输入内
码农编程进阶笔记
2021/07/20
4950
PHP Swoole学习笔记,持续记录
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数 callable参数的值。
房东的狗丶
2023/02/17
2.5K0
swoole学习笔记
swoole是面向生产环境的 PHP 异步网络通信引擎,本笔记是本人在学习完慕课网的课程《Swoole入门到实战打造高性能赛事直播平台》后的笔记,是对学习的代码整理的补充,学习过程中整理的github代码地址:
CS逍遥剑仙
2019/03/03
1.1K0
Hyperf+RabbitMQ+WebSocket实现大屏幕消息推送
基于 Hyperf+ WebSocket +RabbitMQ 实现的一个简单大屏幕的消息推送。
java进阶架构师
2020/06/17
1.4K0
Hyperf+RabbitMQ+WebSocket实现大屏幕消息推送
推荐阅读
相关推荐
​语音聊天程序源码——简单的聊天室搭建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验