web Socket (基本使用)

web Socket是个全双工的网络协议
本次使用nodejs 配合 nodejs-websocket 进行展示
首先创建后端nodejs的项目,过程跳过,最终我们需要有以下文件,参考以下效果图



先从根目录app.js开始,使用web Socket 需要通过npm安装,yarn或cnpm亦可

npm i nodejs websocket -S

安装了之后,不引入怎么使用呢,所以需要在app.js文件引入

// /app.js文件
const ws = require('nodejs-websocket');

引入之后,创建一个ws服务很简单与创建一个http服务非常类似

// /app.js文件
const ws = require('nodejs-websocket');
const server = ws.createServer(connect => {
//这里是ws创建且执行之后就会立马执行的回调
  console.log('new create Web scoket server');
}.listen(2333, () => { //同样需要端口监听,否则怎么知道你是属于服务器的哪个程序
console.log('端口开始监听')
}

客户端这边的基本搭建,要和服务端的ws交互,需要使用webSocket构造对象,传入的参数为字符串('协议webScoket就是ws://ip地址:端口)

<script>
  const ws = new WebScoket('ws://127.0.0.1:2333);
</script>
<script>
  const ws = new WebScoket('ws://127.0.0.1:2333);
  //通过ws这个对象的方法ws.onopen()来监听当前的客户端的ws服务是否已经连接到了服务端的ws服务
  ws.onopen = () => {
  console.log('ws服务已连接');
</script>

一打开着客户端的网页基本秒打印这段话的了👇


image.png

我们来尝试写一个简单又简陋的聊天室
不就是聊天嘛,和QQ微信那样需要基本的发送和接收,那么以客户端为例,该怎么发送东西给服务端呢?
请看下面代码即清楚👇:

<!-- public/index.html -->
<body>
  <input type="text" id="content" />
  <button id="sendBtn" >发送</button>
<script>
//这里为上一步的客户端代码(忽略).....
//得要在已经连接到服务端的情况下才能发送给服务端才行,所在要在onopen的回调下写发送
  const content = document.querySelector('#content');//输入框的文本
  const sendBtn = document.querySelector('#sendBtn');//发送按钮
ws.onopen = () => {
    sendBtn.onclick = () => {
        //发送文本给服务器的方法:ws.send()     
        ws.send(content.value);
    }
}
</script>
</body>

客户端在的发送这里已经基本写完了,很简单,我们再来看一下服务端怎么接收的

// /app.js文件
const ws = require('nodejs-websocket');
const server = ws.createServer(connect => {
  console.log('new create Web scoket server');
   //connect这个参数是代表某个当前连接到服务端的对象
   //只要是监听有关的都是on()方法
    //比如监听客户端发来的文本消息括号第一个参数就是text,顾名思义就是文本,第二个就是回调了,回调里的参数就是客户端发过来的消息(字符串)
    connect.on('text', msg => {
        console.log(msg)
    })
}.listen(2333, () => {
console.log('端口开始监听')
}

在运行服务端app.js的时候可能会报错

image.png

解决办法给它一个监听错误的方法就行了,一想到监听你会想到谁???

没错,还是on方法!

    connect.on('error', err => {
        //效果图就不展示了
        console.log(log)
        console.log('ws服务器发生故障')
    })

![GIF.gif](https://upload-images.jianshu.io/upload_images/13834912-98df073e89ed34fb.gif?imageMogr2/auto-orient/strip

GIF.gif
const ws = require("nodejs-websocket");
const server = ws
  .createServer((connect) => {
    console.log("new create Web scoket server");
    connect.on("text", (msg) => {
      console.log(msg);
    });
    connect.on("error", (err) => {
      console.log("ws服务器发生故障");
    }); 
     // !从这里开始看
    //一个定时器,到点发消息给客户端
    setTimeout(() => {
      connect.sendText('不在,滚,再问打死你');
    }, 3000);
  })
  .listen(2333, () => {
    console.log("端口开始监听");
  });

服务端写好发送,客户端也要写接收否则是收不到的

    <script>
        const ws = new WebSocket('ws://127.0.0.1:2333')
        const content = document.querySelector('#content');
        const sendBtn = document.querySelector('#sendBtn');
        ws.onopen = () => {
            sendBtn.onclick = () => {
                ws.send(content.value);
            }
        }
             // !从这里开始看
        //使用onmessage监听服务端发来的消息,e是代表一个事件对象包含了服务端发来的消息(字符串)
        ws.onmessage = e => {
            console.log(e);
            console.log(e.data);
        }
    </script>
GIF2.gif
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容