对Websocket完全不懂,但又想搞个聊天室,行吗?

本文转载自微信公众号「勾勾的前端世界」,作者xilingls。转载本文请联系勾勾的前端世界公众号。

创新互联建站专注于巴林右旗网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供巴林右旗营销型网站建设,巴林右旗网站制作、巴林右旗网页设计、巴林右旗网站官网定制、微信小程序服务,打造巴林右旗网络公司原创品牌,更为您提供巴林右旗网站排名全网营销落地服务。

回忆以下上一篇内容:《有了 HTTP 协议,为什么还需要 Websocket?》,了解一下 Websocket 的特点和通信原理,我们接着来看 Websocket 服务端与客户端实现。

Websocket 服务端与客户端实现

经过前面对通信过程的梳理,我们将 WebSocket 通信的基本机制已经说的差不多了,为了方便你快速进入实战阶段,我们暂时放弃纯手写实现,直接选择使用老牌的 WebSocket 库: WebSocket-Nodehttps://github.com/theturtle32/WebSocket-Node

简单介绍一下 WebSocket-Node,它有多老牌呢?

NPM 的包名字就是直接使用的 “WebSocket”。曾经,我们西岭老湿看到之后就给出了两个字的评价:“猖狂”。

这个库完全使用 JavaScript 实现,包含了客户端及服务端的实例。其中,客户端包含了 Node 和 浏览器 两个运行环境的代码,除了支持我们前面提到的 Websocket 协议的 13 版本,它同时还支持 Websocket 协议 8 这个老版本,实属优秀。

接下来,我们就来看看,如何借助 Websocket-Node 实现一个 Websocket 服务。

服务端

安装 npm install websocket 后,创建服务器运行文件 ws-server.js ,代码如下,请认真阅读代码及注释:

 
 
 
 
  1. // === 作为帅哥,一定要加注释 ===
  2. var Websocket = require('websocket').server
  3. var http = require('http')
  4. // 创建 HTTP 服务,作为第一次握手链接使用
  5. var httpServer = http.createServer().listen(8080,function(){
  6.   console.log('http://127.0.0.1:8080')
  7. })
  8. // 创建 websocket 服务实力
  9. var wsServer = new Websocket({
  10.   // 配置依赖的握手 http 服务器
  11.   httpServer:httpServer,
  12.   autoAcceptConnections:false
  13. })
  14. // 保存链接池
  15. var conArr = []
  16. // 监听 ws 请求事件
  17. wsServer.on('request',function(request){
  18.   // 获取链接示例
  19.   var connection = request.accept()
  20.   // 保存连接池
  21.   conArr.push(connection)
  22.   // 监听消息事件
  23.   connection.on('message',function(msg){
  24.     console.log(msg)
  25.     // 循环连接池,推送广播消息至客户端
  26.     for(let i = 0;i
  27.       conArr[i].send(msg.utf8Data)
  28.     }
  29.   })
  30. })
  31. // 据说,长得好看的都会看注释

过多的描述,就不写了,据说,长得好看的都会看代码注释(●'?'●)

运行代码文件后,不出意外的情况下,命令行进程会被占用,监听端口也会被占用,证明服务端运行成功。如果两个都没被占用,想啥呢?失败了呀宝子……

如果服务器启动成功,我怎么用客户端建立链接查看呢?有一款 Websocket 客户端工具叫 WebsocketMan,如果感兴趣,你可以下载来试试。

但是像我这样的帅哥,一般都是自己写客户端:)

客户端

Websocket 的客户端并没有什么技术难点,就是浏览器 API 调用。只要你把通信机制够清楚,这玩意就没有不会,因为非常简单,我们直接选择纯手写就可以了,如果你想使用 Websocket-Node 客户端,确实还会更简单。

当然,在写之前,还是要去看看手册的,要不然你怎么知道有哪些 API 呢?

来,手册地址给你:https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket

你先看着,我就不客气,直接开干……

 
 
 
 
  1.   
  •   
  •   
  •   
  • 过多的描述,就不写了,据说,长得好看的都会看代码注释(●'?'●)

    至此,一个完整的 websocket 通信已经建立完成并能够进行双向通信了。

    Websocket-Node 确实很好用,但是功能也确实比较单一了,需要你对 WebSocket 机制有一定的理解之后,才能实现相应的能力。如果,我对 websocket 完全不懂,但又想搞个聊天室,能不能行?

    指!定!能!行!

    Socket.IO

    一个目前最为强大且好用的,基本屏蔽了 websocket 概念的 websocket 库。你几乎不用掌握 websocket 相关的知识,只需要按照 Socket.IO 中提供的 API 就能够很好的实现一个 websocket 通信。

    注意:程序员要“除机心”。

    服务端

     
     
     
     
    1. const { createServer } = require("http");
    2. const { Server } = require("socket.io");
    3. const httpServer = createServer();
    4. const io = new Server(httpServer, {
    5.   cors: {
    6.     origin: "*",
    7.     methods: ["GET", "POST"]
    8.   }
    9. });
    10. io.on("connection", (socket) => {
    11.   socket.on('sendMsg',(data)=>{
    12.     io.emit('pushMsg',data)
    13.   })
    14. });
    15. httpServer.listen(3000, function () {
    16.   console.log('http://127.0.0.1:3000')
    17. });

    客户端

     
     
     
     
    1.   
    2.   
    3.   
    4.   Document
    5.   
    6.     integrity="sha384-PiBR5S00EtOj2Lto9Uu81cmoyZqR57XcOna1oAuVuIEjzj0wpqDVfD0JA9eXlRsj"
    7.     crossorigin="anonymous">
    8.   
    9.   
    10.   

    没什么可解释的,就直接按照 Socket.IO 的 API 写就完事了。

    吾闻之吾师,有机械者必有机事,有机事者必有机心。机心存於胸中,则纯白不备。

    -- 《庄子·天地》

    参考资料:

    库:

    网页名称:对Websocket完全不懂,但又想搞个聊天室,行吗?
    当前路径:http://www.shufengxianlan.com/qtweb/news5/41755.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

    猜你还喜欢下面的内容

    解决方案知识

    分类信息网