php一下单后台立即提示,thinkphp5.0整合phpsocketio完整攻略(绕坑)

thinkphp5.0整合phpsocketio完整攻略(绕坑)

发布时间:2019-11-28 09:07

来源:互联网

当前栏目:web技术类

PHPSocket.IO是基于workerman开发的php版本的socket.IO服务。可用于服务器消息的推送、聊天室、客服系统的开发

使用环境: thinkphp5.0

项目需求

前端下单,后台接受,并立即做出提示。例如:美团外卖,客户端下单成功后,商家端就会立即有接单语音提示。

开发环境

thinkphp5.0

phpsocketio

(由于需要启动socket服务,所以需在能够满足shell的环境下使用)

socketio 优势

这里只是我的观点,毕竟没有怎么深入研究socketio,所以只是浅显的一点总结:

减小服务器IO负载

长连接比ajax轮询靠谱

服务稳定,支持动态

初略的看了一下,内存占用很小,而且只有1个进程,根据官方报道来说1个进程也能容纳1W人次的高并发,所以,对于我的项目来说,已经绰绰有余

官方文档

https://github.com/walkor/phpsocket.io

开始开发

安装 phpsocketio

首先cd到thinkphp的项目根目录。使用以下命令

composer require workerman/phpsocket.io

( 这里composer不做解释,如果有什么问题,度娘一下,应该能够解决 )

安装好以后,vendor文件夹下面应该就有一个workerman的文件夹,如果存在,就恭喜你,已经安装完毕了

服务入口文件

回到项目根目录,新建server.php,开始编辑

#!/usr/bin/env php

define('APP_PATH', __DIR__ . '/application/');

define('BIND_MODULE','socketio/Server/index');

// 加载框架引导文件

require __DIR__ . '/thinkphp/start.php';

这里只要写好就OK。后续的所有东西,可以忽略他的存在

创建服务控制器

上一步的server.php文件里面,模块绑定到了'socketio/Server/index',这里就需要我们手动创建了。为了能理解,我用目录展示

├─application 应用目录

│ ├─socketio 新创建目录

│ │ ├─controller

│ │ │ ├─Server.php 启动文件

Server.php

入口文件只是绑定到了这个控制器,所以这个是整个socketio的核心。

/*

* (c) U.E Dream Development Studio

*

* Author: 李益达 - Ekey.Lee

*

* For the full copyright and license information, please view the LICENSE

* file that was distributed with this source code.

*/

namespace app\socketio\controller;

require_once VENDOR_PATH . "workerman/phpsocket.io/src/autoload.php";

use PHPSocketIO\SocketIO;

use Workerman\Worker;

class Server

{

public function index()

{

$io = new SocketIO(8080);//socket的端口

$io->on('workerStart', function () use ($io) {

$inner_http_worker = new Worker('http://0.0.0.0:5880');//这里IP不用改变,用的内网通讯,端口不能与socket端口想通

$inner_http_worker->onMessage = function ($http_connection, $data) use ($io) {

$io->emit('new_msg', '44444');//这里写了固定数据,请根据自己项目需求去做调整,不懂这里的可以看看官方文档,很清楚

$http_connection->send('ok');

};

$inner_http_worker->listen();

});

// 当有客户端连接时

$io->on('connection', function ($socket) use ($io) {

// 定义chat message事件回调函数

$socket->on('chat message', function ($msg) use ($io) {

// 触发所有客户端定义的chat message from server事件

$io->emit('chat message from server', $msg);

});

});

Worker::runAll();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值