zoukankan      html  css  js  c++  java
  • HTML5

    应用:node.js

    主要步骤

    • 创建文件夹
    • 创建server.js(服务入口,server为自定义文件的命名)
    • npm init -y (快速创建一个package.json文件
    • 依赖包安装:nodejs-websocket (github安装讲解)
      • npm i nodejs-websocket
    • 依赖包在appjs中的使用 (github how to use讲解)

    https://github.com/sitegui/nodejs-websocket#how-to-use-it

     

    配置完毕后启动

    命令行输入>   node server.js (server这个名字不固定具体看你的文件名叫啥

    服务端server.js 源码如下:

     1 const ws = require('nodejs-websocket');//引入依赖包
     2   const POST = 8080;//定义端口
     3 // 创建一个server
     4   const server = ws.createServer(connect => {
     5     //每次只要有新的用户加入,就会为当前用户创建一个connect对象,同时调用一下这个回调函数。
     6     console.log("New connection");
     7     
     8     // text事件:接收用户请求,得到用户传输进来的数据。
     9     connect.on("text", data => {
    10       // 每当接受到用户请求事件,这个回调函数就会被触发。
    11       console.log("Received "+data);
    12       
    13       // sendText/send 方法:接受到请求后,响应一个数据给用户。因为是connect调用,所以只给当前connet对应的用户发送,如果需要给所有用户发送(广播),需要connections这个数组
    14       connect.sendText(data.toUpperCase()+"!!!");//如果直接返回一个data,就会像echo那个服务器一样的功能,接收到什么就返回什么
    15     });
    16     
    17     // 连接断开 触发close事件
    18     connect.on("close", (code, reason) => {
    19       console.log("connection closed");
    20       code && console.log(code);
    21       reason && console.log(reason);
    22     });
    23     
    24     // error:监听服务异常事件,放置因报错而断掉整个服务。
    25     connect.on('error', ()=>{
    26       // 如果触发了close事件,就会走error异常事件(刷新也会),所以必须加error
    27       console.log('连接出现异常');
    28     });
    29   });
    30 server.listen(POST, ()=>{
    31     console.log('webSocket服务启动成功了,监听了端口'+ POST);
    32 });

    客户端demo使用上述配置的服务器。 源码如下:

    示例页面代码html:

    1   <div class="demo">
    2     <input type="text" placeholder="请输入要发送的内容" id="ipt">
    3     <button id="btn">发送请求</button>
    4     <p>
    5       响应结果如下:
    6     </p>
    7     <div id="rst"></div>
    8     <button id="closeBtn">断开连接</button>
    9   </div>

    示例页面代码js:

     1 // var websocket = new WebSocket('ws://echo.websocket.org');// 使用ws官方提供的服务器
     2 var websocket = new WebSocket('ws://localhost:8080'); // 使用我自己配置的服务器,前提要去websocketServer文件夹中把服务启动一下:node server.js
     3 websocket.addEventListener('open', function (e) {
     4     console.log(e, websocket.readyState);
     5     // websocket.send('发送一个方法')
     6     // websocket.send('xing.org1^')
     7     btn.onclick = function (a) {
     8       // console.log(a)
     9       websocket.send(ipt.value);
    10     }
    11   });
    12 // 接收返回值:
    13   websocket.addEventListener('message', (e) => {
    14     console.log(e);
    15     rst.innerHTML = e.data;
    16   });
    17 closeBtn.onclick = function (e) {
    18     console.log(e);
    19     websocket.close(3000,'主动请求断开连接吧');//断开连接
    20   }
    21   websocket.addEventListener('close', function (e) {
    22     console.log('连接断开了', e);
    23   }); 

    connections实现聊天室广播:

    即给所有的用户(server.connections)都发送消息(sendText):

    function broadcast(server, msg) {// 广播函数
    
      server.connections.forEach(function (conn) {
        conn.sendText(msg)
    
      })
    
    }

    具体实现方案,见下篇:《websocket的应用 - 实现一个简易的聊天室效果。》

  • 相关阅读:
    C++学习9 this指针详解
    福建省第八届 Triangles
    UVA 11584 Partitioning by Palindromes
    POJ 2752 Seek the Name, Seek the Fame
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    HDU 2988 Dark roads(kruskal模板题)
    HDU 1385 Minimum Transport Cost
    HDU 2112 HDU Today
    HDU 1548 A strange lift(最短路&&bfs)
  • 原文地址:https://www.cnblogs.com/padding1015/p/10987185.html
Copyright © 2011-2022 走看看