使用 Node.js,我可以使用以下構造將 http 請求的句柄/參考傳遞給子行程:
const k = cp.fork(childPath);
const server = http.createServer((req,res) => {
k.send('foo', req.socket);
});
在子行程中,我可以這樣做:
process.on('message', (m, socket) => {
// 'foo', socket
socket.write([
'HTTP/1.1 200 OK',
'Content-Type: text/html; charset=UTF-8',
'Content-Encoding: UTF-8',
'Accept-Ranges: bytes',
'Connection: keep-alive',
].join('\n') '\n\n');
socket.write(`
<h1> Example </h1>
`);
socket.end('foobar');
};
這很酷,允許子行程直接寫入請求。
我想知道如何為 websocket 服務器做同樣的事情:
const ws = require('ws');
const server = new ws.WebSocketServer({port: 5151});
我假設將連接傳??遞給子行程應該有效:
server.on('connection', c => {
k.send('foo', c); /// error here
});
但我得到一個錯誤,說:
??This handle type cannot be sent
不確定 websocket 連接是否像 http 連接一樣有套接字?
uj5u.com熱心網友回復:
無法發送此句柄型別
websocket 連接只是其協議決議層下的 TCP 連接。事實上,它們以 http 連接開始,然后通過將 http 連接的那個 TCP 套接字傳遞給 webSocket 協議層,將其轉換為 webSocket 協議。
無法將 webSocket 傳遞給子行程并不是因為您無法傳遞 TCP 套接字,而是因為沒有人撰寫代碼來在傳遞的 TCP 套接字周圍的子行程中連接一個新的 webSocket 包裝器. 可能只是撰寫該代碼并不是一個嚴肅的優先事項。
uj5u.com熱心網友回復:
看起來它可以通過帶下劃線的屬性訪問:
server.on('connection', c => {
console.log('new connection');
const k = cp.fork('k.js', [],{
stdio: 'pipe',
detached: false
});
k.send({handle:true}, c._socket); // <--- here
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/536292.html
