اسماعیل کریمیان
3 سال پیش توسط اسماعیل کریمیان مطرح شد
0 پاسخ

مشکل در ارسال نوتیفیکیشن با socket.io و redis در لاراول

با سلام خدمت دوستان و همکاران عزیز
من قبلا روی http این سرویس رو پیاده سازی کردم بدون مشکل
الان هم روی https دارم کار میکنم مشکلاتی روی socket.io بود که حلشون کردم
یکی از اونا cors بود و یکی هم ssl ولی الان وقتی یه event ایجاد میکنم از لاراول اصلا ارسال نمیشه و هیچی سمت کلاینت دریافت نمیکنه
کلاینت بررسی کردم هیچ مشکلی نداره چون ارتباط با سرور سوکت برقراره
ولی انگاری لاراول چیزی نمیفرسته
من شک زیادم روی قضیه ssl هست
کسی میتونه کمکم کنه؟چندروز درگیرشم

'use strict';
var app = require('express')();
var https= require('https');
const fs = require('fs');
// var server = require('http').Server(app);
// var io = require('socket.io')(server);
var options = {
    key: fs.readFileSync('../etc/nginx/ssl/example/server.key'),
    cert: fs.readFileSync('../etc/nginx/ssl/example/server.crt'),
    origins: '*:*',
    cors: true,
};
const server = https.createServer(options, app);
const io = require('socket.io')(server, {
    cors: {
        origin: '*',
    }
});

require('dotenv').config();

var redisPort = process.env.REDIS_PORT;
var redisHost = process.env.REDIS_HOST;
var ioRedis = require('ioredis');
var redis = new ioRedis(redisPort, redisHost);
redis.subscribe('new-request-channel', 'new-response-channel');
redis.on('message', function (channel, message) {
    console.log('Message Recieved: ' + message);
    message  = JSON.parse(message);
    io.emit(channel + ':' + message.event, message.data);
});

var broadcastPort = process.env.BROADCAST_PORT;
server.listen(4040, function () {
    console.log('Socket server is running.');
});

کد بالا برای سمت سرور هست

کد پایین هم برای سمت کلاینت

<html>
    <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    </head>
    <body>
        <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
        <script src="https://sample:4040/socket.io/socket.io.js"></script> 
        <script>

            var socket = io('https://sample:4040', { transports: ['websocket'], rejectUnauthorized: false })

            socket.on("new-request-channel:App\\Events\\RequestSocket", function(message){

                alert(234);

            });

        </script>        
    </body>
</html>

ثبت پرسش جدید

به همدیگه کمک کنیم

به اسماعیل کریمیان کمک کنید تا مشکل خودش را حل کند؛ این‌طور می‌توانیم با هم پیشرفت کنیم.

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام