node.js v9.11.1
cluster: 0.7.7
node.jsのclusterモジュールを使っているのですが、親プロセスからは問題なくMySQLに接続できるのですが、子プロセスからは繋がりません。
どうやって繋げるのでしょうか?
下の例は親のMySQLの実行結果を子に渡して、子はその値を元にMySQLを実行する、というものです。
子にデータは問題なく渡っているのですが、その先が詰まってしまって困っています。
よろしくお願い致します。
javascript
1'use strict'; 2 3const mysql = require('mysql2/promise'); 4const cluster = require('cluster'); 5const CPUs = require('os').cpus().length; 6 7// MySQL接続 8const connect = () => { 9 const connection = mysql.createConnection({ 10 host: 'localhost', 11 user: 'root', 12 password: '', 13 database: 'test' 14 }); 15 return connection; 16} 17 18// 親プロセス 19const master = async () => { 20 // MySQL接続 21 const conn = await connect().catch((err) => { 22 console.log(err); 23 }); 24 25 // workerプロセスを作成 26 for (let i = 0; i < CPUs; i++) { 27 const worker = cluster.fork(); 28 } 29 30 // MySQL実行 31 let row; 32 const sql = `SELECT id FROM hoge LIMIT 1`; 33 try { 34 [row] = await conn.query(sql); 35 } catch (err) { 36 console.log(err); 37 } 38 39 // 実行結果を子プロセスに渡す 40 try { 41 cluster.on('online', (worker) => { 42 if (row[0]) worker.send(row[0].id); 43 }); 44 } catch (err) { 45 console.log(err); 46 } 47} 48 49// 子プロセス 50const child = async () => { 51 // MySQL接続 ←ここが動いていない 52 const conn = await connect().catch((err) => { 53 console.log(err); 54 }); 55 56 // 親から値を受け取る 57 process.on('message', async (msg) => { 58 // MySQL実行 59 let row2; 60 const sql2 = `SELECT data FROM fuga WHERE id = ? LIMIT 1`; 61 try { 62 [row2] = await conn.query(sql2, [msg]); 63 } catch (err) { 64 console.log(err); 65 } 66 67 console.log(row2[0].data); 68 }); 69} 70 71if (cluster.isMaster) { 72 master(); 73} else { 74 child(); 75}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/06/05 11:48
2018/06/05 11:57 編集