fbalabanov / yii2-wschat
基于Web Sockets和ratchet php的在线聊天
Requires
- bower-asset/backbone: 1.2.*
- bower-asset/fontawesome: 4.*
- bower-asset/jquery: 2.*
- bower-asset/js-cookie: 2.1.*
- bower-asset/pnotify: 2.0.*
- bower-asset/underscore: 1.8.3
- cboden/ratchet: 0.3.*
- yiisoft/yii2: *
- yiisoft/yii2-bootstrap: *
- yiisoft/yii2-mongodb: 2.1.*
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-29 05:07:57 UTC
README
基于Web Sockets和ratchet php的在线聊天
![演示] (doc/demo.gif)
安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一:
php composer.phar require --prefer-dist fbalabanov/yii2-wschat
或者
"fbalabanov/yii2-wschat": "*"
将以下内容添加到您的 composer.json 文件的 require 部分。
使用方法
-
聊天扩展可以使用yii支持的任何数据库存储。
如果指定了
mongodb扩展,聊天将尝试将其用作消息历史存储,否则将使用应用程序配置中 db 组件指定的扩展。以下是使用mongodb存储的简单示例。安装 MongoDB 和 yii2-mongodb 扩展以存储消息历史,您只需在
console配置中指定连接即可'components' => [ 'mongodb' => [ 'class' => '\yii\mongodb\Connection', 'dsn' => 'mongodb://username:password@localhost:27017/dbname' ] ]
在创建的mongodb数据库中,您需要创建一个名为
history的集合;重要:如果您使用 db 组件,您需要在数据库中创建名为
history的表。您可以在tests/codeception目录中查看简单的示例(例如,postgresql和mysql)。 -
要启动聊天服务器,需要创建控制台命令并将其设置为守护进程
-
创建扩展
yii\console\Controller的控制器ServerController extends \yii\console\Controller
-
创建启动服务器的操作
namespace app\commands; use fbalabanov\wschat\components\Chat; use fbalabanov\wschat\components\ChatManager; use Ratchet\Server\IoServer; use Ratchet\Http\HttpServer; use Ratchet\WebSocket\WsServer; class ServerController extends \yii\console\Controller { public function actionRun() { $server = IoServer::factory(new HttpServer(new WsServer(new Chat(new ChatManager()))), 8080); $server->run(); } }
如果您想使用聊天进行用户身份验证,您必须为
ChatManager实例指定userClassName属性。例如$manager = Yii::configure(new ChatManager(), [ 'userClassName' => '\yii\db\ActiveRecord' //allow to get users from MySQL or PostgreSQL ]);
-
现在,您可以使用
yii控制台命令运行聊天服务器yii server/run
-
-
要在页面上添加聊天,只需调用
<?php echo ChatWidget::widget();?>
或者如果您想使用聊天进行用户身份验证,只需将配置作为参数添加
<?php echo ChatWidget::widget([ 'auth' => true, 'user_id' => '' // setup id of current logged user ]);?>
List of available options: auth - boolean, default: false user_id - mixed, default: null port - integer, default: 8080 chatList - array (allow to set list of preloaded chats), default: [ id => 1, title => 'All' ], add_room - boolean, default: true (allow to user create new chat rooms)
您还可以存储添加的聊天,只需指定用于事件处理的js回调函数
Chat.vent('chat:add', function(chatModel) {
console.log(chatModel);
});
此代码片段可以在您的代码中添加,但必须在聊天小部件加载之后。在回调中,您将能够访问 Chat.Models.ChatRoom backbone 模型。现在,您需要添加代码以保存聊天室,而不是 console.log()。
如果
YII_DEBUG已启用,则所有js脚本将单独加载。
默认情况下,聊天将尝试从资产文件夹加载两张图片: /avatar_16.png 和 /avatar_32.png。
可能的问题
如果您在控制台日志中看不到任何消息,请检查您的日志配置组件的 flushInterval 和 exportInterval。简单的配置可能如下所示
'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'flushInterval' => 1, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning', 'info'], 'logVars' => [], 'exportInterval' => 1 ], ], ],
如果您使用 https 协议,聊天将尝试连接到 wss 而不是 ws。但是,Ratchet PHP 不支持 通过SSL工作,因此您需要使用一些代理,如 stunnel。
许可
MIT