首页 > 解决方案 > Socket.io 离子 4 和 php

问题描述

我已经使用 socket.io 配置了我的 ionic 4 应用程序,并按照 socket.io 网站上的说明进行操作。localhost 上的一切都运行良好,因为当我node index.js在命令行中键入时,服务器 socket.io 会启动,并且同一网络中的所有用户都可以在同一个房间里聊天。

我如何配置东西以便它可以在在线服务器上运行?喜欢配置php?

标签: phpionic-frameworksocket.iochationic4

解决方案


这是一个很好的设置。我几乎所有的应用程序中都有它。它是这样的:

首先,你需要在服务器上安装redis和node。

现在,要从服务器触发通知,请创建一个助手:

<?php

namespace App\Helpers;

class SocketIo
{
    public static function trigger($event, $data)
    {
        $redisChannel = 'socket-io';
        $redis->publish($redisChannel, json_encode([
            'event' => $event,
            'data' => $data
        ]));
    }
}

$redis你的 redis 客户端在哪里。如果你使用 Laravel,你可以设置$redis = app('redis');

现在,创建一个简单的节点文件,例如socket.js,来实际处理 socket-io:

var server = require('http').Server();
var socket = require('socket.io')(server);
var Redis = require('ioredis');
var redis = new Redis();
require('dotenv').config();

var redisChannel = process.env.SOCKET_IO_CHANNEL || 'socket-io';

redis.subscribe(redisChannel);
redis.on('message', function (channel, message) {
    message = JSON.parse(message);
    socket.emit(message.event, message.data);
});

server.listen(3000, function () {
    console.log('Node server is running socket.js on port 3000');
});

在您的package.json依赖项中:

"dependencies": {
    "dotenv": "^4.0.0",
    "ioredis": "^3.1.4",
    "socket.io": "^2.0.3"
}

当然,运行npm install安装依赖项,然后你可以去node socket.js运行它。

在生产中,您需要安装类似的东西pm2supervisor一直socket.js运行。

pm2 start socket.js

如果你想和主管一起去,这里是配置:

[program:socket-io]
process_name=%(program_name)s_%(process_num)02d
command=node /var/www/express-callback/socket.js
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
logfile_maxbytes=1MB
stdout_logfile=/var/www/express-callback/storage/logs/socket-io.log

推荐阅读