位置: 编程技术 - 正文

学习 NodeJS 第八天:Socket 通讯实例(nodejs v8)

编辑:rootadmin

推荐整理分享学习 NodeJS 第八天:Socket 通讯实例(nodejs v8),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs v8,nodejs v8,nodejs详解,nodejs基础知识,nodejs基础知识,nodejs实战教程,nodejs基础知识,nodejs基础教程,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

一般来讲,HTTP 是基于文本的“单向”通讯机制。这里所谓的“单向”,乃相对于“双向”而言,因为 HTTP 服务器只需根据请求返还恰当的 HTML 给客户端即可,不涉及客户端向服务端的通讯。这种单向的机制比较简单,对网络质量要求也不高。而更多的场景则是需要可靠、稳定的端到端连接。一般这种服务是实时的、有态的而且是长连接,长连接则暗示两段须达致相向通讯的能力,也就说是服务端客户端两者间能够实时地相互间通信。毫无疑问,能够实时通信的服务器正是我们对服务器基本要求之一。区别于 HTTP 服务器以 HTTP 为通讯协议, 实时服务器一般采用较为底层的 TCP/IP 为协议通讯,实现了“套字节 Socket”的双向机制。

Socket 是根据博克莱 (U.C.Berkley) 大学早期发展的 Socket 概念写成的,其设计理念是是将网络传输类比成文件的读取与写入 (传送的动作被视为是写入/接收的动作被视为是读取),如此、传送与接收就简化为编程人员比较容易懂的 读取与写入,降低了网络编程的学习困难度。

聊天室服务器

聊天室的实时连接基于底层的 TCP 直接连接,为此我们须调用 Node 的 TCP 模块。如果不太熟悉所谓 TCP 网络编程?太底层了是不是?没关系,我也不熟悉,边学边做嘛,只不过千万不必因为遇到陌生的词汇而害怕,其实这样原理并不深奥,而且下面的例子也十分的简单易懂!咱们就从最简单的开始吧,下面代码仅仅十行,它的作用是服务器向客户端输出一段文本,完成 Sever --> Client 的单向通讯。

客户端可以是系统自带的 Telnet:

执行 telnet 后,与服务点连接,反馈 Hi! Bye! 的字符,并立刻结束服务端程序终止连接。如果我们要服务端接到到客户端的信息?可以监听 server.data 事件并且不要中止连接(否则会立刻结束无法接受来自客户端的消息):

这里要说明一下的是,不不同操作系统对端口范围的限制不一样,有可能是随机的。

那么上面是不是一个完整功能的代码呢?我们说还有一个问题没有考虑进去:那就是一旦某个客户端退出,却仍保留在 clientList 里面,这明显是一个空指针(NullPoint)。如果是在这样的话我们写程序太脆弱了,能不能更健壮一些?——请接着看。

首先我们简单地把 client 从数组 clientList 中移除掉。完成这工作一点都不困难。Node TCP API 已经为我们提供了 end 事件,即客户端中止与服务端连接的时候发生。移除 client 对象的代码如下:

但是我们还不敢说上述代码很健壮,因为一旦 end 没有被触发,异常仍然存在着。下面我们看看解决之道:重写 broadcast():

学习 NodeJS 第八天:Socket 通讯实例(nodejs v8)

TCP API 中还提供一个 error 事件,用于捕捉客户端的异常:

Node 网络编程的 API 还丰富,此次仅仅是个入门,更多的内容请接着看,关于浏览器 Socket 应用。

Socket.IO

前面说到,浏览器虽然也属于客户端的一种,但仅支持“单工”的 HTTP 通讯。有见及此,HTML5 新规范中推出了基于浏览器的 WebSocket,开发了底层的接口,允许我们能进行 更强大的操作,超越以往的 XHR。

如第一个例子那般,我们无须第三方框架就可以直接与 Node TCP 服务器 进行 Socket 通讯。

但我们又要认清一个事实,不是每个浏览器都可以顺利支持 WebSocket 的。于是 Socket.IO ( WebSocket 时候的降级支持,同时使得一些旧版本的浏览器也可以“全双工”地工作。优先使用的顺序如下:

WebSocket Socket over Flash API XHR Polling 长连接 XHR Multipart Streaming Forever Iframe JSONP Polling

经过封装,我们可以不探究客户端使用上述哪一种技术达致“全双工”;而我们编写代码时,亦无论考虑哪种放法,因为 Socket.IO 给我们的 API 只有一套。了解 Socket.IO 其用法就可以了。

先在浏览器部署 Socket.IO 的前端代码:

服务端 Node 代码:

当客户端连接时,服务端会同时出发两个事件:server.onRequest 和 Socket.onConnection。它们之间有什么区别呢?区别在于 Socket 的是持久性的。

多个 Socket 连接,先是客户端代码:

服务端代码:

如上代码,我们可以划分多个命名空间,分别是 upandrunning 和 weather。

关于 Express 中使用 Soclet.io,可以参考《Node:Up and Ruuning》一书的 7.2.2 小节。

今晚时间的关系,涉及 Socket.io 许多方面还没有谈,容小弟我日后再了解。

标签: nodejs v8

本文链接地址:https://www.jiuchutong.com/biancheng/374123.html 转载请保留说明!

上一篇:详解Nodejs基于mongoose模块的增删改查的操作(nodejs oom)

下一篇:详解nodejs 文本操作模块-fs模块(二)(nodejs word)

  • 企业所得税留抵税额会显示在申报表上吗?
  • 私车公用协议可以入账吗?
  • 原材料不良品的处理流程
  • 以前年度计提的工资没发放怎么处理
  • 新公司注册完成的后续流程
  • 工程会计和工业会计进销项区别是什么
  • 所购税控盘减免税款
  • 附加税减半征收政策从什么时候开始
  • 广告制作赚钱吗?
  • 集资款利息走什么科目
  • 房屋租赁个人所得税缴纳标准是多少
  • 发票冲红需要什么手续
  • 期末留抵税额可以留多久
  • 软件开发服务费可以计入无形资产吗
  • 税控设备可以跨省销售吗
  • 税控技术服务费计入什么科目
  • 房地产企业预收账款
  • 报完税后反结账调整主营业务收入可以吗?
  • 分公司注销未分配利润转给总部,总部如何做账
  • 安装设备用的材料计入什么科目
  • 工程施工成本发票未到会计分录及账务处理
  • 水利建设基金多交可以退么
  • 企业是核定征收还是查账征收怎么查
  • 软件开发行业的现状
  • Intel 酷睿i5 8300H
  • 苹果系统权限管理在哪找
  • win11无法打开开始菜单怎么办
  • PHP:pg_send_query_params()的用法_PostgreSQL函数
  • 农产品销售发票抵扣政策
  • php实战
  • 预收账款可以挂账多久
  • 补缴的土地出让金需要计提吗
  • php的implode
  • 基于网页的客服系统
  • 废料收入的成本怎么核算
  • 大学网页制作作业dw
  • 个人所得税计提基数公式
  • 进项税额转出怎么做账务处理
  • 增值税在纳税申报表中怎么得出
  • dedecms配置
  • 现金周期和经营周期的计算公式
  • 小企业的固定资产的折旧方法可以根据需要
  • 建筑公司劳务分包开票内容怎么写
  • 第三方代销什么意思
  • 房地产公司项目开发流程
  • 长期持股的最好方法
  • 如果停产怎么计算成本
  • 人力资源公司的盈利模式
  • 3%税率专票为什么不能抵扣
  • 其他应付款是否能大于收入
  • 补提以前年度个税会计分录
  • 企业预付账款是什么意思
  • 删除mysql数据库命令
  • mysql5.7.27安装
  • 严密防范什么安全风险,严厉打击敌对势力犯罪
  • 怎么处理鲍鱼
  • win7 64位旗舰版系统运行游戏提示计算机丢失mxvcp120.dll的解决方法
  • win8 网络连接
  • fedora系统安装软件
  • windows8.1安装windows7
  • win10粘滞键怎么解除
  • 在Linux命令行中快速删除光标前的快捷键是什么?
  • win8怎么更新到win8.1
  • window8任务栏消失了怎么办
  • 铁嘴大师
  • html+css网页布局
  • qq自动登出
  • 批处理文件实例
  • 批处理文件是可执行文件吗
  • python sftp put
  • jquery的show和hide
  • linux两个版本
  • JavaScript程序设计形考任务第一次任务
  • asyncio使用
  • python import ssl
  • python的例子
  • 广州税务局怎么开发票
  • 地税局电话咨询电话
  • 交社保去地税局交吗
  • 广州市电子税务局怎样跨区申报税务
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设