pm2 多进程node的 socket.io-redis 怎么用?

我想试试多进程node的websocket,
我看得 https://socket.io/docs/using-... , 尝试使用redis
但是看到最后的三行代码,试着用,但是用pm2多开node进程还是连不上

var io = require("socket.io")(3000);
var socketRedis = require("socket.io-redis");

io.adapter(socketRedis({host: 'localhost', port: 6379}));
io.of('/').adapter.on('error', function(err){
  console.log("err: " + err);
});

io.on("connection", function(socket){
  console.log("web socket connection successful");
  socket.on("disconnect", function(){
    console.log("web socket disconnect")
  });
  socket.on("chat message", function(msg){
    io.emit("chat message", {msg: [1,2,3,4,5]});
  })
})

redis 数据肯定打开了,
就是握手失败,不用pm2, 就是成功的
这个socket.io-redis 到底怎么用啊?

阅读 6.1k
1 个回答

使用socket.io时要指定transports:['websocket','polling']就可以了。
后端:

var express = require('express');
var app = express();
var path = require('path');
var server = require('http').createServer(app);
var io = require('socket.io')(server, {
    transports: ['websocket', 'polling']
});
var redis = require('socket.io-redis');
io.adapter(redis({
    host: 'localhost',
    port: 6379
}));

io.on('connection', function (socket) {
    socket.on('disconnect', () => {

    });

    socket.on('message', (message) => {
        console.log(message);
        socket.emit('message', {
            message: 'world'
        });
    });
});

var router = express.Router();
router.get('/', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'index.html'));
});

app.use(express.static(path.resolve(__dirname, 'node_modules')));
app.use(router);

server.listen(3000);

前端:

    <script>
        var btn = document.getElementById('btn1');
        btn.addEventListener('click', function () {
            var socket = io.connect('/', {
                transports: ['websocket', 'polling'],
                reconnection: false
            });
            socket.on('connect', function () {
                // 发起“脚手架安装”请求
                socket.emit('message', {
                    message: 'hello'
                });

                socket.on('message', function (d) {
                    console.log(d);
                    socket.disconnect();
                });

            });

            socket.on('error', function (err) {
                console.log(err);
            })
        });
    </script>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题