
正文
nodejs 如何使用upgrade,并且C/B 发送消息
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
1 const http = require('http');
const querystring = require("querystring");
var postData = querystring.stringify({
'msg': 'Hello World!'
});
// Create an HTTP server
var srv = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('okay');
});
srv.on('upgrade', (req, socket, head) => { socket.write('HTTP/1.1 101 Web Socket Protocol Handshake\r\n' +
'Upgrade: WebSocket\r\n' +
'Connection: Upgrade\r\n' +
'\r\n'); socket.on("data", (d)=> {
console.log(d.toString())
});
socket.on("end", ()=> {
socket.write("发送服务器的消息");
socket.end();
if (!socket.destroyed) {
console.log(" socket.end 会销毁socket,不信你可以执行end,看会不会进入这个方法")
if (socket.destroy) {
socket.destroy();
console.log(!socket.destroyed)
} }
});
}); // now that server is running
srv.listen(1337, '127.0.0.1', () => { // make a request
var options = {
port: 1337,
hostname: '127.0.0.1',
headers: {
'Connection': 'Upgrade',
'Upgrade': 'websocket'
}
}; var req = http.request(options);
req.on('upgrade', (res, socket, upgradeHead) => {
socket.write('发送客户端的消息\r\n');
socket.end(); socket.on('data', (chunk) => {
console.log(chunk.toString());
});
socket.on('end', () => {
console.log("服务器消息接收完毕");
console.log("socket已经被销毁",socket.destroyed)
}); }); req.end(); });
整个流程是
1 :request的 header里加上:
'Connection': 'Upgrade',
'Upgrade': 'websocket'生成的http.ClientRequest 最后一定要调用end函数,不然服务器会一直等待你消息发送完毕
2: 服务器监听 ‘Upgrade’,然后返回:
'HTTP/1.1 101 Web Socket Protocol Handshake\r\n' +
'Upgrade: WebSocket\r\n' +
'Connection: Upgrade\r\n' +
'\r\n'维基百科里说了,这样叫作握手!

这样的话,Upgrade 就算建立起来了。
3:然后就可以通过socket相互消息了。记住socket.end一旦执行,就会断开这次的tcp链接了。








