redis、socket.io

编程入门 行业动态 更新时间:2024-10-07 08:24:03

<a href=https://www.elefans.com/category/jswz/34/1771249.html style=redis、socket.io"/>

redis、socket.io

我想使用 Laravel 并使用 socket.io、redis、节点服务器设置实时网络应用程序。 这是我的 server.js 代码:

var app = require('express')();

app.use(function (req, res, next) {
    // Website you wish to allow to connect
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8888');

    // Request methods you wish to allow
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

    // Request headers you wish to allow
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

    // Set to true if you need the website to include cookies in the requests sent
    // to the API (e.g. in case you use sessions)
    res.setHeader('Access-Control-Allow-Credentials', true);

    // Pass to next layer of middleware
    next();
});

var server = require('http').Server(app);
var io = require('socket.io')(server, {
    cors: { origin: '*' },
});

var redis = require('redis');

server.listen(3000, () => {
    console.log('hel');
});

io.on('connection', async function (socket) {
    console.log('client connected');

    var redisClient = redis.createClient({
        legacyMode: true,
    });

    await redisClient.connect().catch(console.error);

    redisClient.subscribe('message');
    redisClient.on('message', function (channel, data) {
        console.log('message received');
        socket.emit(channel, data);
    });
    socket.on('disconnect', function () {
        redisClient.quit();
    });
});

在我的controller中,我使用Redis如下代码,这个功能有效的是当我添加一个帖子(帖子在我的母语中是'BaiDang'),Redis将发布并且我可以在浏览器中实时通知:

public function store(Request $request, BaiDang $baiDang)
    {
        try {
            $baiDang->create($request->all());
            if ($request->hasFile('files')) {
                foreach ($request->file('files') as $file) {
                    $name = time() . rand(1, 100) . Str::random(40) . '.' . $file->extension();
                    Storage::putFileAs('files', $file, $name);

                    $fileData['bai_dang_id'] = DB::table('bai_dang')->max('id');
                    $fileData['link'] = 'files/' . $name;

                    FileBaiDang::create($fileData);
                }
            }
            Redis::connection();
            Redis::publish('message', json_encode($request->all()));
            return $this->success($baiDang, 201, 'Created');
        } catch (Exception $e) {
            //catch exception
            echo 'Message: ' . $e->getMessage();
            return $this->error(400, 'Lỗi server update không thành công');
        }
    }

我有另一个名为 socket.io.js 的客户端文件:

import { io } from 'socket.io-client';

const socket_host = '127.0.0.1';
const socket_port = '3000';
const socket = io(socket_host + ':' + socket_port);

socket.on('message', (data) => {
    console.log('aaahhahaahah');
});

我在下面的 app.js 中导入这个文件:

import './socket.io';

当我通过命令“节点服务器”运行节点服务器时,当客户端连接时,出现错误:

client connected
Error: connect ECONNREFUSED ::1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16) {
  errno: -4078,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '::1',
  port: 6379
}

拜托,任何人都可以帮助我...

对了,我问过GPT,有很多方法可以修复,但都失败了。如果你说我检查我是否运行 redis 服务器,使用正确的配置主机和端口等......我尝试了所有这些......haizz

回答如下:

更多推荐

redis、socket.io

本文发布于:2024-05-30 14:44:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770607.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:redis   socket   io

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!