- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Node.js websocket 使用 socket.io库实现实时聊天室
Node.js websocket 使用 socket.io库实现实时聊天室
认识websocket
WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duple)。一开始的握手需要借助HTTP请求完成。
其实websocket 并不是很依赖Http协议,它也拥有自己的一套协议机制,但在这里我们需要利用的socket.io 需要依赖到http 。
之前用Java jsp写过一个聊天,其实实现逻辑并不难,只是大部分时间都用在UI的设计上,其实现原理就是一个基于websocket的通信,要想做一个好的聊天室,我觉得大部分精力可能更应该花在与用户的视觉层交互上。
废话不闲扯,我们先来看一下websocket 与传统的ajax 有什么不同之处。
在之前,如果我们想要获取到服务器更新的信息,我们可以使用ajax 轮询来完成,然而,这样做的弊端是增大了我们与服务器的交互次数,然而极大部分的交互都是无意义的,因为我们只是做一个询问,如果没有任何新的信息,我们几乎什么都不用做,因此这样会极大的浪费服务器资源和带宽。
然而使用websocket 会使客户端与服务器建立一个长连接,并且,当服务器有新消息时可以主动推送到客户端,所以我们可以不用一次次的去询问服务器是否有新消息,而是直接由服务器主动推送到客户端,这样在无消息的状态下,客户端不会频繁的去请求服务器。
使用websocket 的特点在于服务器可以主动推送消息到客户端。
使用socket.io 库实现实时聊天
这也是这篇博文的主题之处。socket.io发布到npm 平台上,我们可以直接用npm 来安装到**当前**node_modules目录下。
npm install socket.io --save
下面我们就可以直接使用require 方法来将这个模块引入
const socket = require(socket.io);
在创建此websocket 服务器之前,它需要依赖于一个已经创建好的http服务器。
let socketServer = socket.listen(require(http).createServer((req,resp) = {
//返回页面
resp.end(require(fs).readFileSync(./socketIOTest1.html));
}).listen(9999,localhost,() = {console.log(listening);}));
在上述代码中socketIOTest1.html 是在当前目录下的一个html文件,在下面我会贴上详细的代码,这里先稍稍带过。
在websocket 服务器对象中有一个connection事件,这个事件在有客户端连接??socket服务器时被触发。下面我们监听这个事件,打印一句话来表示有用户连接。
//监听connection 事件
socketServer.on(connection,socket = {
console.log(有一用户连接);
}
上述代码中,callback有一个参数socket为连接到客户端的一个socket端口对象,这个对象有一个message 事件,当客户端有消息推送到服务器时,事件循环会取出这个事件与之对应的回调函数并执行。
socket.on(message,msg = {
console.log(msg);
});
同时,socket对象还可以监听disconnect 事件,来监听用户断开连接的情况
socket.on(disconnect,() = {
console.log(有一用户退出连接);
});
因为我们这次的主题是要创建一个能够实时聊天的聊天室,因此光有这些是不够的,我们还需要一个能够与用户交互的客户端。
下面是我的socketIOTest代码:
!DOCTYPE html
html lang=en
head
meta charset=UTF-8
titleDocument/title
/head
body
textarea name= id=content cols=30 rows=10 /textarea
input id=write type=text placeholder=please write content here
input id=send type=button value=send /
script src=./socket.io/socket.io.js/script
script
let send = document.getEl
您可能关注的文档
- LED显示屏静电防护知识培训_2016-5-13_17.32.50.pptx
- LCD电视相关基础资料.ppt
- Management Information System(Chapter1-2)管理信息系统双语教学课件.ppt
- 3.王天龙-从大查房病例探寻麻醉并发症的预防、诊断与治疗教程.ppt
- M116脱机发卡软件说明.doc
- LTE基站设备配置说明-1.21-201401.ppt
- MB05-03质量成本控制程序.doc
- 3.手掷滑翔机ppt张春琴教程.ppt
- 30.1《图形的旋转》ppt课件教程.ppt
- MBA数据模型与决策_02线性规划引论.ppt
- 2-红河州建筑施工安全生产标准化工地复核评分表(2022年修改版).docx
- 6.锡通项目2018年下半年工作会汇报材料(2018.7.9).docx
- 2018道路工程知识点汇总(新版).docx
- 附件3:月度生产例会安全汇报资料-站台门项目部.docx
- 附件2:广东建工集团2018年度科技成果汇总表.DOC
- 马武停车区、三汇停车区停车位管理系统,0#台账缺量.doc
- 攀成钢委办发〔2015〕19号(党风廉政建设责任考核与追究办法).doc
- 1-红河州建筑工程质量管理标准化复核评分表(2022年修改版).docx
- 中交第三公路工程局第四工程分公司项目经济合同结算管理办法(修订).doc
- 厂站安全操作规程汇编.doc
最近下载
- 高中-英语-北师大版(2019)-Unit3Viewingworkshop同步教学设计【新教材】北师大版(2019)必修第一册.docx VIP
- 2023-2024学年八年级语文下学期期末复习题型专练非连续性文本阅读(原卷版+解析版).docx VIP
- 2024年海南省海口市龙华区海南华侨中学自主招生地理试题.docx VIP
- (三模)豫西北教研联盟 (平许洛济)2024—2025学年高三第三次质量检测化学试卷(含答案).pdf
- 中考数学压轴题100题(全).docx
- 石油钻井工初级.pdf
- 基于AT89S52单片机的脉搏测量器设计.doc VIP
- 微分中值定理在实际生活中的应用.doc
- 2023年版:重症患者气道廓清技术专家共识.docx
- 《马克思主义基本原理概论》对立统一规律.ppt
文档评论(0)