php使用socket.io进行tcp通讯

爷,独闯天下 提交于 2020-01-27 04:56:58

安装socket.io库

composer require workerman/phpsocket.io

启动入口文件

<?php
// [ 应用入口文件 ]
namespace think;

// [ 入口文件 ]

// 调试模式开关
define('APP_DEBUG', true);

// 定义CMF根目录,可更改此目录
define('CMF_ROOT', dirname(__DIR__) . '/');
//
//// 定义应用目录
define('APP_PATH', CMF_ROOT . 'app/');

// 定义路由目录
define('ROUTE_PATH', APP_PATH . 'route.php');

// 定义配置目录
define('CONFIG_PATH', CMF_ROOT . 'data/config/');

// 定义命名空间
define('APP_NAMESPACE', 'app');

// 定义网站入口目录
define('WEB_ROOT', __DIR__ . '/');

// 加载基础文件
require __DIR__ . '/../vendor/thinkphp/base.php';

// 执行应用并响应
// Container::get('app', [APP_PATH])->bind('portal/Server')->run()->send();
// Container::get('app')->bind('demo/Server')->run()->send();
Container::get('app')->bind('common/Server')->run()->send();

扩展文件

<?php
namespace app\common\controller;

use Workerman\Worker;
use PHPSocketIO\SocketIO;
use think\Db;
use cmf\controller\RestBaseController;

class ServerController extends RestBaseController
{

    //本地测试 
    public function index()
    {

        // 在2021端口创建服务
        $io = new SocketIO(2021);

        $io->on('connection', function ($socket) use ($io) {
            $socket->on('chat message', function ($msg) use ($io) {
                $io->emit('chat message', $msg);
            });
            // 监听到新的客户端连接即在服务端输出'new connection'
            echo 'new connection' . "\n";
            // 并向客户端发送'连接成功'
            $socket->emit('success', '连接成功');
            // 客户端发送消息过来
            $socket->on('sendMsg', function ($msg) use ($io) {
                // 在服务端输出消息
                echo $msg . "\n";
                // 在收到的消息前面拼接'收到'后向客户端发送回去
                $io->emit('sendMsg', '收到"' . $msg . '"');
                // 将接受到的消息存储到数据库
                $data['msg'] = $msg;
                // Db::table('order')->insert($data);
            });
        });

        // 启动服务
        Worker::runAll();
    }

    //线上跑
    public function start()
    {

        // 在2021端口创建服务
        $io = new SocketIO(2021);

        $io->on('connection', function ($socket) use ($io) {
            $socket->on('chat message', function ($msg) use ($io) {
                $io->emit('chat message', $msg);
            });
            // 监听到新的客户端连接即在服务端输出'new connection'
            echo 'new connection' . "\n";
            // 并向客户端发送'连接成功'
            $socket->emit('success', '连接成功');
            // 客户端发送消息过来
            $socket->on('sendMsg', function ($msg) use ($io) {
                // 在服务端输出消息
                echo $msg . "\n";
                // 在收到的消息前面拼接'收到'后向客户端发送回去
                $io->emit('sendMsg', '收到"' . $msg . '"');
                // 将接受到的消息存储到数据库
                $data['msg'] = $msg;
                // Db::table('order')->insert($data);
            });
        });

        // 启动服务
        Worker::runAll();
    }
}

前端连接

<script src='https://cdn.bootcss.com/socket.io/2.0.3/socket.io.js'></script>

// 如果服务端不在本机,请把127.0.0.1改成服务端ip
var socket = io('http://127.0.0.1:2021');
socket.on('sendMsg', function (msg) {
    // 服务器端若检测到充值,则提醒
    if (msg == '1') {
    	alert('你好,有新的充值提醒');
    }
});
        

启动服务

php server.php start -d

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!