node.js - 运行 socketio 和 nodejs 集群模块
问题描述
服务器
var cluster = require('cluster');
// Code to run if we're in the master process
if (cluster.isMaster) {
// Count the machine's CPUs
var cpuCount = require('os').cpus().length;
// Create a worker for each CPU
for (var i = 0; i < cpuCount; i += 1) {
cluster.fork();
}
// Listen for terminating workers
cluster.on('exit', function (worker) {
// Replace the terminated workers
console.log('Worker ' + worker.id + ' died :(');
cluster.fork();
});
// Code to run if we're in a worker process
}
else {
const app = express();
const server = require('http').createServer(app);
const io = require('socket.io')(server);
app.set('socketio', io);
const port = process.env.PORT || 9090;
server.listen(port,() => {
console.log('Server running at http://127.0.0.1:' + port + '/');
});
io.on('connection', function (socket) {
console.log("CONNECTED")
});
}
客户
import io from 'socket.io-client'
const socket = io('http://localhost:9090');
socket.on('notification', (data) => {
if(props.user && data.user._id === props.user._id) {
this.setNotification(data.notification);
}
})
错误消息 http://localhost:9090/socket.io/?EIO=3&transport=polling&t=MaDRz1u&sid=VzBUqt22usNbdqKCAAAb 400(错误请求)
当我删除 if else 并保留 else 语句中的代码时,一切正常。我需要添加什么以便 sessionID 不是未知的。
响应对象是 {"code":1,"message":"Session ID unknown"}
解决方案
发生这种情况是因为集群创建的每个子进程不同步并且彼此不认识。为了克服这个问题,您需要一个适配器来在集群之间进行通信。
请参阅 Socket.io 文档来解决此问题。
推荐阅读
- docker - 无法在超级账本结构中创建通道
- ruby - 'case' 语句如何在函数中工作?
- android - 设计android应用时如何在我的应用中获取谷歌广告ID?
- mysql - 致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [42000]:语法错误或访问冲突:1064 使用或在查询中
- ionic3 - ionic 3 sidemenu 显示来自本地存储的数据
- android - Dialog-flow webhook Implementation
- javascript - JavaScript - 映射、过滤、减少。从数组转换为更深的树
- sql - Function call on non-indexed column in where clause will affect the performance
- android - 无法使用 SDK 连接到 Phantom 4 Pro v2
- java - Get Free Space Location around particular location in PDFBox tool in Java