takielias/codeigniter-websocket

使用 Ratchet Websocket 技术的 CodeIgniter Websocket。灵感来源于 https://github.com/romainrg/ratchet_client

1.0.4 2019-11-17 03:38 UTC

This package is auto-updated.

Last update: 2024-08-29 04:25:51 UTC


README

Latest Version on Packagist Total Downloads

takielias

CodeIgniter WebSocket 库

CodeIgniter WebSocket 库。通过使用 Ratchet (Socketo.me & ratchet_client) Websocket 技术来实现强大的实时应用程序。

CodeIgniter 4.x 的 WebSocket 库 https://github.com/takielias/codeigniter4-websocket

如果您遇到任何问题,可以查看 CodeIgniter WebSocket 示例 https://github.com/takielias/codeigniter-websocket-example

📚 依赖

  • PHP 5.6+
  • CodeIgniter 框架(推荐 3.1.*)
  • Composer
  • PHP sockets 扩展已启用

🔰 安装

➡️ 第 1 步:使用 Composer 安装库

只需在您项目文件夹中运行以下命令即可

composer require takielias/codeigniter-websocket

别忘了将您的自动加载包含到 CI 配置文件中

$config['composer_autoload'] = FCPATH.'vendor/autoload.php';

➡️ 第 2 步:一键设置

如果您想进行一键安装,只需在项目目录中执行以下命令即可

注意:这将创建 2 个新的控制器 Welcome.php 和 User.php

php vendor/takielias/codeigniter-websocket/install.php --app_path=application

这里 app_path 定义了您的默认 Codeigniter 应用程序目录名称

one click installation

哇!你已经做到了! ✔️

在以下 URL 上打开您项目的两个页面,使用不同的 ID

https:///your project directory/index.php/user/index/1

https:///your project directory/index.php/user/index/2

❗ 在此示例中,recipient_iduser_id 定义,如您所见,它是 身份验证回调 定义接收者 ID。

如果您遇到类似情况,那么对您来说一切正常

user_1

user_2

您可以在每个页面上尝试输入并发送一些内容(查看 cmd 获取更多日志)。

cmd

➡️ 手动运行 WebSocket 服务器

如果您想启用调试模式,请在您的项目文件夹中键入以下命令

php index.php welcome index

如果您看到以下消息,您就完成了(不要关闭您的 cmd)!

First_launch.png

➡️ 测试应用程序

使用您的 php 应用程序广播消息 💥 !

如果您想使用 php 脚本或其他内容广播消息,可以使用类似 textalk/websocket 的库 (它作为必需库包含在我的 composer.json 中)

注意:第一条消息是必须的,并且始终存在以执行身份验证

$client = new Client('ws://0.0.0.0:8282');

$client->send(json_encode(array('user_id' => 1, 'message' => null)));
$client->send(json_encode(array('user_id' => 1, 'message' => 'Super cool message to myself!')));

身份验证 & 回调 ♻️

该库允许您定义一些回调,以下是一个示例

class Welcome extends CI_Controller
{
    public function index()
    {
        // Load package path
        $this->load->add_package_path(FCPATH . 'vendor/takielias/codeigniter-websocket');
        $this->load->library('Codeigniter_websocket');
        $this->load->remove_package_path(FCPATH . 'vendor/takielias/codeigniter-websocket');

        // Run server
        $this->codeigniter_websocket->set_callback('auth', array($this, '_auth'));
        $this->codeigniter_websocket->set_callback('event', array($this, '_event'));
        $this->codeigniter_websocket->run();
    }

    public function _auth($datas = null)
    {
        // Here you can verify everything you want to perform user login.
        // However, method must return integer (client ID) if auth succedeed and false if not.
        return (!empty($datas->user_id)) ? $datas->user_id : false;
    }

    public function _event($datas = null)
    {
        // Here you can do everyting you want, each time message is received
        echo 'Hey ! I\'m an EVENT callback'.PHP_EOL;
    }
}
  • 身份验证 类型的回调在客户端发布的第一个消息时被调用。
  • 事件 类型的回调在发布每条消息时被调用。

如何在 Codeigniter 控制器中接收响应?

请参阅 Welcome.php 控制器。

public function index()
{
	// Load package path
	$this->load->add_package_path(FCPATH . 'vendor/takielias/codeigniter-websocket');
	$this->load->library('Codeigniter_websocket');
	$this->load->remove_package_path(FCPATH . 'vendor/takielias/codeigniter-websocket');

	// Run server
	$this->codeigniter_websocket->set_callback('auth', array($this, '_auth'));
	$this->codeigniter_websocket->set_callback('event', array($this, '_event'));
	$this->codeigniter_websocket->set_callback('roomleave', array($this, '_roomleave'));
	$this->codeigniter_websocket->run();
}

public function _roomleave($data = null)
{
	// Here you will receive data from the frontend roomleave event trigger.
	echo 'Hey ! I\'m a room leave EVENT callback' . PHP_EOL;
}

主要概念是回调函数。

您将在定义的函数中接收响应。您可以从前端触发事件,如下所示使用 jQuery

    socket.send(JSON.stringify({
        'type': 'roomleave',
        'room_name': targetName,
        'user_id': "buzz4rd"
    }));

它将触发以下函数

public function _roomleave($data = null)
{
	// Here you will receive data from fron tend roomleave event trigger.
	echo 'Hey ! I\'m a room leave EVENT callback' . PHP_EOL;
}

您可以查看 使用 PHP WebSocket 的 Room Chat。它是使用 构建的

错误 🐛 或功能 💪

请随意提交问题或发送拉取请求

在 Buy Me A Coffee 上获得支持

嘿,兄弟!帮帮我买一杯 ☕!

takielias