fbalabanov/yii2-wschat

基于Web Sockets和ratchet php的在线聊天

安装: 13

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:yii2-extension

v1.0 2017-10-21 06:11 UTC

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 部分。

使用方法

  1. 聊天扩展可以使用yii支持的任何数据库存储。

    如果指定了 mongodb 扩展,聊天将尝试将其用作消息历史存储,否则将使用应用程序配置中 db 组件指定的扩展。

    以下是使用mongodb存储的简单示例。安装 MongoDByii2-mongodb 扩展以存储消息历史,您只需在 console 配置中指定连接即可

    'components' => [
        'mongodb' => [
            'class' => '\yii\mongodb\Connection',
            'dsn' => 'mongodb://username:password@localhost:27017/dbname'
        ]
    ]

    在创建的mongodb数据库中,您需要创建一个名为 history 的集合;

    重要:如果您使用 db 组件,您需要在数据库中创建名为 history 的表。您可以在 tests/codeception 目录中查看简单的示例(例如,postgresql和mysql)。

  2. 要启动聊天服务器,需要创建控制台命令并将其设置为守护进程

    • 创建扩展 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
  3. 要在页面上添加聊天,只需调用

    <?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

可能的问题

如果您在控制台日志中看不到任何消息,请检查您的日志配置组件的 flushIntervalexportInterval。简单的配置可能如下所示

'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