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链接了。
nodejs 如何使用upgrade,并且C/B 发送消息的更多相关文章
- 使用WeCloud消息推送接口发送消息NodeJs版
		
WeCloud是一家初创公司的产品,眼下主要在做Android和IOS消息推送这块.他们提供了用于向设备发送消息的协议,详细协议内容见消息推送协议. 这篇文章将使用NodeJs基于这个推送协议完毕向A ...
 - PHP实现RTX发送消息提醒
		
RTX是腾讯公司推出的企业级即时通信平台,大多数公司都在使用它,但是我们很多时候需要将自己系统或者产品的一些通知实时推送给RTX,这就需要用到RTX的服务端SDK,建议先去看看RTX的SDK开发文档( ...
 - 【C#】给无窗口的进程发送消息
		
注:本文适用.net2.0+的winform程序 一个winform程序,我希望它不能多开(但是如何防多开不是本文要讲的),那么在用户启动第二个实例的时候,作为第二个实例来说,大概可以有这么几种做法: ...
 - 增加线程异步发送消息的方法二(Runnable)
		
//获取当前时间:毫秒 long a = System.currentTimeMillis(); System.out.println("a :" + a); try { //更改 ...
 - 增加线程异步发送消息的方法一(Thread)
		
@RequestMapping(value="order/updateOrder.do") public String updateOrder(HttpServletRequest ...
 - 一步一步来做WebQQ机器人-(五)(发送消息||完结)
		
× 本篇主要是: 发送QQ消息(to:好友,群),以及对小黄鸡抓包利用它的语言库 本文是WebQQ流程的最后一章 最后一章内容不多但我还是啰嗦,可能对大部分人都已知晓的流程方法我也会介绍一下 前面几个 ...
 - 【转载】Delphi7从子线程中发送消息到主线程触发事件执行
		
在对数据库的操作时,有时要用一个子线程来进行后台的数据操作.比如说数据备份,转档什么的.在主窗口还能同是进行其它操作.而有时后台每处理一个数据文件,要向主窗口发送消息,让主窗口实时显示处理进度在窗口上 ...
 - 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息
		
一,在AppDelegate.m中写入如下代码: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...
 - Linux给指定用户或全部用户(已登录)发送消息
		
在局域网络内很多时候是许多人共用一些机器,但如果多个人同时在使用同一台机器必定会发生一些冲突,比如系统的某些配置被修改,这样引起一些麻烦.那么如果在使用该机器之前,先给登录到该机器的所有其他用户发送一 ...
 - RTX发送消息提醒实现以及注意事项
		
一.RTX简介 RTX是腾讯公司推出的企业级即时通信平台.该平台定位于降低企业通信费用,增强企业内部沟通能力,改善企业与客户之间的沟通渠道,创造新兴的企业沟通文化,提高企业生产力.RTX平台的主要功能 ...
 
随机推荐
- 什么是REST架构 - z
			
什么是REST架构 - z REST架构风格是全新的针对Web应用的开发风格,是当今世界最成功的互联网超媒体分布式系统架构,它使得人们真正理解了Http协议本来面貌.随着 REST架构成为主流技术 ...
 - Windows 8.1 with Update 镜像下载(增OEM单语言版)
			
该系统已有更新的版本,请转至<Windows 8.1 with update 官方最新镜像汇总>下载. 2014年4月9日凌晨,微软向MSDN订阅用户开放了Windows 8.1 with ...
 - TXMLDocument换行的两种方案
			
手写代码: XML格式化使用msxml引擎,Delphi代码如下: Delphi/Pascal code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
 - 【剑指offer】面试题34:丑数
			
题目: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路: 第一 ...
 - 关于链表的一些重要操作(Important operations on a Linked List)
			
上篇博文中讨论了链表的一些基本操作: 链表的基本操作(Basic Operations on a Linked List) 然而,为创建一个多功能的链表,在深度学习之前我们还需要了解更多的链表操作. ...
 - 基于Android的物理类游戏,源代码(JAVA)分享
			
游戏视频DEMO:http://v.youku.com/v_show/id_XNTM5MzM1Mzg0.html?from=s1.8-1-1.2 说明:一个自己做的Android上的物理类游戏,物理引 ...
 - 常用的Eclipse快捷键
			
alt+shift+r 修改名字 ctrl+shift+r 查找源类 Eclipse快捷键功能1. [ALT+/] --->提示此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不 ...
 - python urllib基础学习
			
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #使用python创建一个简单的WEB客户端 import urll ...
 - Js操作Select
			
jquery操作select(取值,设置选中) 每一次操作select的时候,总是要出来翻一下资料,不如自己总结一下,以后就翻这里了. 比如<select class="selecto ...
 - Block内的强引用
			
众所周知,当某个对象持有着一个Block的时候,如果在Block内部使用强引用反过来持有这个对象,就会导致引用循环.为了避免引用循环,可以使用__weak修饰符,苹果的官方文档在用代码演示__weak ...