takielias / codeigniter-websocket
使用 Ratchet Websocket 技术的 CodeIgniter Websocket。灵感来源于 https://github.com/romainrg/ratchet_client
Requires
- php: >=5.4.0
- cboden/ratchet: ^0.4.1
- textalk/websocket: ^1.2
README
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 应用程序目录名称
哇!你已经做到了! ✔️
在以下 URL 上打开您项目的两个页面,使用不同的 ID
https:///your project directory/index.php/user/index/1
https:///your project directory/index.php/user/index/2
❗ 在此示例中,recipient_id 由 user_id 定义,如您所见,它是 身份验证回调 定义接收者 ID。
如果您遇到类似情况,那么对您来说一切正常
您可以在每个页面上尝试输入并发送一些内容(查看 cmd 获取更多日志)。
➡️ 手动运行 WebSocket 服务器
如果您想启用调试模式,请在您的项目文件夹中键入以下命令
php index.php welcome index
如果您看到以下消息,您就完成了(不要关闭您的 cmd)!
➡️ 测试应用程序
使用您的 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 上获得支持
嘿,兄弟!帮帮我买一杯 ☕!