博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs 如何使用upgrade,并且C/B 发送消息
阅读量:5929 次
发布时间:2019-06-19

本文共 2126 字,大约阅读时间需要 7 分钟。

1 const http = require('http'); 2 const querystring = require("querystring"); 3 var postData = querystring.stringify({ 4     'msg': 'Hello World!' 5 }); 6 // Create an HTTP server 7 var srv = http.createServer((req, res) => { 8     res.writeHead(200, {'Content-Type': 'text/plain'}); 9     res.end('okay');10 });11 srv.on('upgrade', (req, socket, head) => {12 13     socket.write('HTTP/1.1 101 Web Socket Protocol Handshake\r\n' +14         'Upgrade: WebSocket\r\n' +15         'Connection: Upgrade\r\n' +16         '\r\n');17 18     socket.on("data", (d)=> {19         console.log(d.toString())20     });21     socket.on("end", ()=> {22         socket.write("发送服务器的消息");23         socket.end();24         if (!socket.destroyed) {25             console.log(" socket.end 会销毁socket,不信你可以执行end,看会不会进入这个方法")26             if (socket.destroy) {27                 socket.destroy();28                 console.log(!socket.destroyed)29             }30 31         }32     });33 });34 35 // now that server is running36 srv.listen(1337, '127.0.0.1', () => {37 38     // make a request39     var options = {40         port: 1337,41         hostname: '127.0.0.1',42         headers: {43             'Connection': 'Upgrade',44             'Upgrade': 'websocket'45         }46     };47 48     var req = http.request(options);49     req.on('upgrade', (res, socket, upgradeHead) => {50         socket.write('发送客户端的消息\r\n');51         socket.end();52 53         socket.on('data', (chunk) => {54             console.log(chunk.toString());55         });56         socket.on('end', () => {57             console.log("服务器消息接收完毕");58             console.log("socket已经被销毁",socket.destroyed)59         });60 61     });62 63     req.end();64 65 66 });

整个流程是

  1 :request的 header里加上:

'Connection': 'Upgrade', 'Upgrade': 'websocket' 生成的 最后一定要调用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链接了。

 

转载于:https://www.cnblogs.com/huenchao/p/6234550.html

你可能感兴趣的文章
html5与css3学习实践--基础的内容划分标签
查看>>
div 点击展开
查看>>
實現多个checkbox單選功能(转)
查看>>
DBNavigator中把insert变为append
查看>>
关于尾递归
查看>>
C++ 复制控制之复制构造函数
查看>>
HDU 2853 (KM最大匹配)
查看>>
Linux下tcp协议socket的recv函数返回时机分析(粘包)
查看>>
Java实现BASE64编解码器
查看>>
android之HttpURLConnection(转)
查看>>
ZH奶酪:Git简明教程
查看>>
查看Linux下*.a库文件中文件、函数、变量等情况
查看>>
hadoop编程技巧(6)---处理大量的小型数据文件CombineFileInputFormat申请书
查看>>
Linux命令总结【待续】
查看>>
Android实现播放视频
查看>>
【程序员眼中的统计学(2)】集中趋势度量:分散性、变异性、强大的距
查看>>
Leetcode: Add and Search Word - Data structure design
查看>>
Is valid identifier?
查看>>
Atitit.python web环境的配置 attilax 总结
查看>>
[CS231n-CNN] Training Neural Networks Part 1 : parameter updates, ensembles, dropout
查看>>