laravel+swoole打造im简易聊天室(代码片段)

wgchen~ wgchen~     2023-01-01     633

关键词:

应用场景:实现简单的即时消息聊天室

(一)扩展安装

pecl install swoole

安装完成后可以通过以下命令检测Swoole是否安装成功

php -m | grep swoole

(二)webSocket服务端代码

我们需要通过Laravel Command来实现,因为Swoole只能运行在PHP CLI模式下。

1.生成Command类

php artisan make:command SwooleServer

2.编写webSocket Server逻辑

<?php

namespace App\\Console\\Commands;

use Illuminate\\Console\\Command;

class SwooleServer extends Command

    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'swoole:server';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'swoole websocket';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    
        parent::__construct();
    

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    
        //创建server
        $server = new \\Swoole\\WebSocket\\Server("0.0.0.0", 9502);
        
        //连接成功回调
        $server->on('open', function (\\Swoole\\WebSocket\\Server $server, $request) 
            $this->info($request->fd . '链接成功');
        );

        //收到消息回调
        $server->on('message', function (\\Swoole\\WebSocket\\Server $server, $frame) 
            $content = $frame->data;

            //推送给所有链接
            foreach ($server->connections as $fd)
                $server->push($fd,$content);
            
        );

        //关闭链接回调
        $server->on('close', function ($ser, $fd) 
            $this->info($fd . '断开链接');
        );

        $server->start();
    


3.运行服务端

php artisan swoole:server

(三)客户端实现

1.HTML+JS代码实现

<div style="width:600px;margin:0 auto;border:1px solid #ccc;">
    <div id="content" style="overflow-y:auto;height:300px;"></div>
    <hr />
    <div style="height:40px;background:white;">
        <input type="text" class="form-control" id="message"  placeholder="请输入内容">
        <button type="button" class="btn btn-primary" onclick="sendMessage()">Primary</button>
    </div>
</div>

<script type="text/javascript">
    if(window.WebSocket)
          // 端口和ip地址对应不要写错
          var webSocket = new WebSocket("ws://127.0.0.1:9502");
          webSocket.onopen = function (event) 
              console.log('webSocket 链接成功');
          ;
          
          //收到服务端消息回调
          webSocket.onmessage = function (event) 
            var content = document.getElementById('content');
            content.innerHTML = content.innerHTML.concat('<p style="margin-left:20px;height:20px;line-height:20px;">'+event.data+'</p>');
          
          
          var sendMessage = function()
              var data = document.getElementById('message').value;
              webSocket.send(data);
          
      else
          console.log("您的浏览器不支持WebSocket");
      
</script>

通过以上的代码便完善一个基本的简易聊天室,但是距离一个真正完善的及时通讯系统构建还相差甚远,具体的理解和应用都写在了代码注释中,如有不能理解的地方,可以去查看Swoole官方文档以及Webscoket Api.

附上聊天室演示图:


docker搭建swoole简易聊天室(代码片段)

docker搭建swoole的简易聊天室首先pull镜像dockerpulldocker.io/kong36088/nginx-php7-swoole创建容器dockerrun--name自己创建的名字-p9501:9501-p8089:80-d-itkong36088/nginx-php7-swoole/bin/bash进入容器dockerexec-it容器名字或id/bin/bash进 查看详情

swoole用websocket服务器搭建一个简易的聊天室功能(代码片段)

swoole用WebSocket服务器搭建一个简易的聊天室功能域名无ssl加密域名有ssl加密开启服务端常链接浏览器分别开启两个客户端窗口,进行聊天域名无ssl加密WS.php写服务端代码<?phpclassWSprivate$ws=null;publicfunction__construct()//创建Web... 查看详情

swoole用websocket服务器搭建一个简易的聊天室功能(代码片段)

swoole用WebSocket服务器搭建一个简易的聊天室功能域名无ssl加密域名有ssl加密开启服务端常链接浏览器分别开启两个客户端窗口,进行聊天域名无ssl加密WS.php写服务端代码<?phpclassWSprivate$ws=null;publicfunction__construct()//创建Web... 查看详情

如何用websocket打造web端im即时通讯聊天

WebSocket如今在Web端即时通讯技术应用里使用广泛,不仅用于传统PC端的网页里,也被很多移动端开发者用于基于HTML5的混合APP里。对于想要在基于Web的应用里添加IM、推送等实时通信功能,WebSocket几乎是必须要掌握的技... 查看详情

swoole入门到实战打造高性能赛事直播平台

韩天峰力荐Swoole入门到实战打造高性能赛事直播平台第1章课程介绍欢迎大家来到swoole的课程!本章主要是介绍了swoole的一些特性,以及使用场景,并且分享了swoole在其他公司的一些案例,最后重点讲解了swoole学习的一些准备工... 查看详情

laravel使用swoole加速

参考技术A1、安装Swoole扩展(自行安装)2、laravel安装laravel-swoole组件https://github.com/swooletw/laravel-swoolecomposerrequireswooletw/laravel-swoole然后,添加服务提供者:如果你使用Laravel,在config/app.php服务提供者数组添加该服务提供者:3、启动... 查看详情

基于laravel+swoole开发智能家居后端

基于Laravel+Swoole开发智能家居后端在上一篇<Laravel如何优雅的使用Swoole>中我已经大概谈到了Laravel结合Swoole的用法。今天,我参与的智能家居项目基本上已经结束了Web服务器及android端的开发(熬了个通宵突击把剩下的做了,... 查看详情

使用swoole来加速你的laravel应用

Swoole 是为PHP开发的生产级异步编程框架。他是一个纯C开发的扩展,他允许PHP开发者在PHP中写高性能,可扩展的并发TCP,UDP,Unixsocket,HTTP,WebSocket服务,而不需要拥有太多的非阻塞I/O编程和低级别的Linux内核知识。你可以把&... 查看详情

swoole系列6.1将laravel改成swoole版的(代码片段)

将Laravel改成Swoole版的在讲正式的Swoole框架之前,我们先来试试自己把一个普通的Laravel框架改成Swoole版的,看看能不能成功。当然,这只是一个实验性质的,其实我们还有很多别的选择。Laravel的入口首先,我... 查看详情

swoole系列6.1将laravel改成swoole版的(代码片段)

将Laravel改成Swoole版的在讲正式的Swoole框架之前,我们先来试试自己把一个普通的Laravel框架改成Swoole版的,看看能不能成功。当然,这只是一个实验性质的,其实我们还有很多别的选择。Laravel的入口首先,我... 查看详情

swoole计一次swoole_server配合laravel5启动报错:addressalreadyinuse[98]

 [2019-11-11 11:42:25 @21371.0]WARNINGswSocket_bind(:434): bind(0.0.0.0:9501) failed, Error: Address already in use[98]In Swoole.php line&nb 查看详情

韩天峰力荐swoole入门到实战打造高性能赛事直播平台

第1章课程介绍欢迎大家来到swoole的课程!本章主要是介绍了swoole的一些特性,以及使用场景,并且分享了swoole在其他公司的一些案例,最后重点讲解了swoole学习的一些准备工作。1-1课程导学1-2Swoole简介试看1-3学习Swoole的准备工... 查看详情

httpserver2框架swoole混合秒杀(代码片段)

阅读目录使用第三方自定义路由、简易封装Request对象1下载安装路由1路由应用示例3简易封装request4应用简易Request封装5测试技巧使用第三方自定义路由、简易封装Request对象1下载安装路由https://github.com/nikic/FastRoute需要PHP7.4或更新... 查看详情

swoole+redis+websocket实现点对点即时聊天(代码片段)

Swoole+Redis+webSocket实现点对点即时聊天场景webSocket服务端代码前端代码场景Swoole+Redis+webSocket实现点对点即时聊天。webSocket服务端代码我们需要通过LaravelCommand来实现,因为Swoole只能运行在PHPCLI模式下。1.生成Command类phpart... 查看详情

swoole+redis+websocket实现点对点即时聊天(代码片段)

Swoole+Redis+webSocket实现点对点即时聊天场景webSocket服务端代码前端代码场景Swoole+Redis+webSocket实现点对点即时聊天。webSocket服务端代码我们需要通过LaravelCommand来实现,因为Swoole只能运行在PHPCLI模式下。1.生成Command类phpart... 查看详情

微信小程序之swoole/websocket创建聊天室(php)(代码片段)

 一、php安装扩展组件Swoole参考连接 二、配置linux服务器在站点的配置文件中#SSL-END下面添加代码location/wss/ #通过配置端口指向部署websocker的项目 proxy_passhttp://127.0.0.1:9205/; proxy_http_version1.1; proxy_set_headerUpgrade$http_upgrade; proxy_se 查看详情

基于swoole的网页一对一实时聊天(代码片段)

需求分析网站上实现一对一即时沟通,能查看聊天记录以及离线留言,新消息提醒。核心技术html5的websocket,php的swoole扩展http://wiki.swoole.com/数据表CREATETABLE`msg`(`id`int(11)NOTNULLAUTO_INCREMENT,`content`varchar(255)NOTNULLDEFAULT‘‘COMMENT‘内容... 查看详情

使用php+swoole实现的网页即时聊天工具:phpwebim

使用PHP+Swoole实现的网页即时聊天工具全异步非阻塞Server,可以同时支持数百万TCP连接在线同时支持websocket+comet2种兼容协议,可用于所有种类的浏览器包括IE拥有完整的UI界面支持单聊/群聊/组聊等功能支持发送表情支持永久保存... 查看详情