位置: 编程技术 - 正文

Node.js websocket使用socket.io库实现实时聊天室(websocket解决跨域)

编辑:rootadmin

推荐整理分享Node.js websocket使用socket.io库实现实时聊天室(websocket解决跨域),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:websocket有跨域问题吗,websocket jsonrpc,websocket有跨域问题吗,nodejs websocket server,nodejs websocket server,websocket有跨域问题吗,nodejs-websocket,nodejs websocket server,内容如对您有帮助,希望把文章链接给更多的朋友!

认识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目录下。

下面我们就可以直接使用require 方法来将这个模块引入

在创建此websocket 服务器之前,它需要依赖于一个已经创建好的http服务器。

在上述代码中socketIOTest1.html 是在当前目录下的一个html文件,在下面我会贴上详细的代码,这里先稍稍带过。

在websocket 服务器对象中有一个connection事件,这个事件在有客户端连接到socket服务器时被触发。下面我们监听这个事件,打印一句话来表示有用户连接。

上述代码中,callback有一个参数socket为连接到客户端的一个socket端口对象,这个对象有一个message 事件,当客户端有消息推送到服务器时,事件循环会取出这个事件与之对应的回调函数并执行。

同时,socket对象还可以监听disconnect 事件,来监听用户断开连接的情况

Node.js websocket使用socket.io库实现实时聊天室(websocket解决跨域)

因为我们这次的主题是要创建一个能够实时聊天的聊天室,因此光有这些是不够的,我们还需要一个能够与用户交互的客户端。 下面是我的socketIOTest代码:

在上述代码中,我用script标签引入了一个socket.io.js文件,这个文件不需要另外去下载,而直接引入即可,因为socket.io.js是被包含于socket.io模块中,在上面node的程序代码中,我们通过require方法引入了socket.io模块,因此我们可以直接通过相对路径访问到它。

接下来我们就可以在script标签中使用如同服务端的代码。

使用io.connect()方法连接到websocket服务器,该方法返回一个与连接的服务器与之对应的一个socket端口对象。

下面我们同样监听message 和 disconnect事件。

为了更能突出websocket的作用,在html代码中,我只使用了一个textarea标签来显示内容,两个input标签用于发送。 使用socket对象的send方法就能使消息在服务器与客户端进行消息传递。

websocket群聊实现

现在我们假设一个场景,有u1和u2两个用户,同时连接到服务器,那么我们怎么使他们互相通信呢,实现的方法及其简单。当u1连接到服务器,在服务器中,使用一个map键值对把与u1对应的socket对象进行保存。

与此同时,u2也连接上服务器,也由该map把与u2与之对应的socket对象进行储存。 现在,u1点击了send按钮发送一条消息至服务器,服务器收到消息后遍历map,转发给所有socket对象,实现群聊的实时通信。

下面我贴上服务端的完整代码,仅供参考

websocket私聊实现

在说私聊的实现之前,我们首先要找到对于每一个用户的唯一标识,在通常的项目开发中,我们都使用用户的用户名进行标识,每个用户通过注册获得与之对应的用户名。将用户名保存在数据库中利用主键防止重复。

实现私聊的方法有很多种,这里我的实现方法是这样的:

① 当用户连接时,把用户的socket端口对象使用map进行储存,储存的key 为用户的socket对象,value为用户的用户名,写一个方法用于更新客户端列表 ② 用户默认用户名为 <未命名>,指定自定义用户名时,使用socket.emit方法触发服务端的某个事件,遍历map找到与之对应的key,进行value修改 ③ 发送消息时,根据选择列表来指定要发送的人,在服务端,遍历map,找到要发送到的用户名,进行发送,同时更新到自己的聊天框

标签: websocket解决跨域

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

上一篇:原生node.js案例--前后台交互(原生js import)

下一篇:Node.js获取前端ajax提交的request信息(获取nodejs命令行信息)

  • 已经抵扣的进项税额转出怎么申报
  • 非本公司员工如何申报个税
  • 企业发生劳动仲裁还可以进行融资吗
  • 交易性金融资产的交易费用计入哪里
  • 生产企业出口货物可享受免税并退税
  • 企业年金个人所得税扣除标准
  • 机器设备预付的费用计入
  • 手工做账流程图
  • 招标代理服务费收费标准2023
  • 不应抵扣的进项税抵扣了怎么办
  • 个人代垫公司费用微信转账如何报销
  • 用实物资产注资给子公司需缴纳增值税吗?
  • 有代扣个税的是什么人
  • 小规模企业如何
  • 建筑业简易征收的适用范围
  • 什么企业做汇算清缴报告
  • 上期留抵税额计算
  • 劳务派遣差额征税5%
  • 特许权使用费如何缴纳增值税
  • 营改增后房屋出租税率
  • 购入二手设备,无发票怎么记账
  • 把十六点改成十五点半起床
  • 公司购买投影仪的必要性?
  • 企业所得税固定资产折旧计算
  • 辅助生产费用的核算
  • 在win7中怎么安转只兼容win10的软件
  • 商品进价销售要上税吗
  • 鸿蒙系统桌面如何设置
  • windows10如何开启wifi
  • 代扣手续费是啥意思
  • 深度学习&故障诊断初学者 - 学习路线
  • 企业管理的管理系统
  • 劳务所得和经营所得有啥区别
  • php批量导入数据库
  • 【AutoGPT】你自己运行,我先睡了—— ChatGPT过时了吗?
  • wx-java
  • vue入门
  • set nu命令
  • css 3有哪些新特性
  • 销售商品的收入属于收入吗
  • 一般公司是什么企业类型
  • discuz发帖标签
  • php网页上传图片并显示
  • redis的
  • 织梦模板改成帝国模板
  • 跨年发票一般分为哪几类
  • 衡量税收负担通常用()
  • 减值准备为什么不影响影响资产余额
  • 长期股权投资实现的净利润权益法
  • 电脑访问另一台电脑访问权限
  • mysql数据库中进入mysql库的命令
  • 租车协议要不要报税务机关备案?
  • 公司账户钱能全取出来吗
  • 记账错误是什么意思
  • 对非本单位的营销方案
  • 内部转账单怎么填制
  • 支付投资者投入的款项
  • 单位内部部门之间人员调整
  • 银行卡账户年费
  • 固定资产公司
  • sql server删除重复数据保留一条
  • win7总是更新怎么办
  • Win10如何禁止显卡驱动自动更新
  • xp 更新
  • win10再出变故 微软撤下Windows Update中11月份更新
  • kernel headers not found for target kernel
  • python等于和双等于
  • linuxyum安装php7
  • unity火球特效
  • 查询同一网段下的其他ip
  • python元组和数组
  • 用Fragment+ViewPager搭建万能的android界面
  • javascript原型链详解
  • 税务总局副局长饶
  • 税务局怎么添加税种
  • 国税局事业编制和公务员哪个比较好
  • 支付宝怎么样开通刷脸支付
  • 个税申报网上操作步骤
  • 海南海葬需要多少费用
  • 小规模纳税人租赁收入增值税税率是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设