关键词:
Laravel + Swoole 打造IM简易聊天室
应用场景:实现简单的即时消息聊天室
(一)扩展安装
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界面支持单聊/群聊/组聊等功能支持发送表情支持永久保存... 查看详情