IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> nodejs基于express搭建websocket -> 正文阅读

[网络协议]nodejs基于express搭建websocket

一、搭建websocket

搭建node项目并安装依赖:

npm install express -g
npm install express-generator -g
express myproject
npm install ws

在 app.js 中配置 ws:

var websocket = require('ws');
var server = new websocket.Server({
  port: 1234
});
server.on('open', () => {
  console.log('open');
});
server.on('close', () => {
  console.log('close');
});
server.on('connection', (ws, req) => {
  console.log('connection连接成功');
  ws.on('message', (data) => {
    // data: 接收信息
    server.clients.forEach((item) => {
      if (item.readyState === ws.OPEN) {
        // console.log('' + data);
        item.send('' + data);
      }
    });
  });
});

客户端连接:
A 页面通过iframe内嵌B页面测试通信
A页面:

import React, { useEffect, useRef, useState } from 'react';
import './index.scss';

export default function learn2() {
  useEffect(() => {
    const ws = new WebSocket('ws://localhost:1234');
    ws.onopen = () => {
      console.log('连接成功');
      // ws.send('test');
      setws(ws);
    };
    ws.onerror = (err) => {
      console.log('连接失败:', err);
    };
    ws.onclose = (close: any) => {
      console.log('连接关闭:', close);
      // close.target.onopen();
    };
    ws.onmessage = (event) => {
      console.log('通信: ', event);
      // const oldWsData = JSON.parse(window.sessionStorage.wsData);
      const info = JSON.parse(event?.data);
      // const res = JSON.stringify([info, ...oldWsData]);
      // window.sessionStorage.wsData = res;
      setwsData((pre: any) => {
        return [...pre, info];
      });
    };
  }, []);

  const myref = useRef<any>(null);
  const [ws, setws] = useState<any>(null);
  const [wsData, setwsData] = useState<any>([]);

  const sendMsg = (key: number) => {
    if (key == 13) {
      const msg = myref.current.value;
      const msgToJson = JSON.stringify({ msg, id: 'me' });
      ws.send(msgToJson);
      myref.current.value = '';
    }
  };

  return (
    <div className="learn2">
      <div className="content">
        <div>
          <div>
            <input
              type="text"
              ref={myref}
              onKeyDown={(event) => {
                sendMsg(event.keyCode);
              }}
            />
            <button onClick={() => sendMsg(13)}>发送</button>
          </div>

          {/* 聊天模版 */}
          <div className="talkWrap">
            {wsData.map((item: any, idx: any) => {
              if (item.id == 'me') {
                return (
                  <p key={idx} style={{ textAlign: 'right' }}>
                    {item.id}{item.msg}
                  </p>
                );
              }
              return (
                <p key={idx}>
                  {item.id}{item.msg}
                </p>
              );
            })}
          </div>
        </div>

        <iframe src="http://localhost:3000/learn3" width={800} height={800} />
      </div>
    </div>
  );
}

B:

import { send } from 'process';
import React, { useEffect, useRef, useState } from 'react';
import './index.scss';

export default function learn3() {
  useEffect(() => {
    const ws = new WebSocket('ws://localhost:1234');
    ws.onopen = () => {
      console.log('连接成功');
      // ws.send('test');
      setws(ws);
    };
    ws.onerror = (err) => {
      console.log('连接失败:', err);
    };
    ws.onclose = (close: any) => {
      console.log('连接关闭:', close);
      // close.target.onopen();
    };
    ws.onmessage = (event) => {
      console.log('通信3: ', event);
      const info = JSON.parse(event?.data);
      setwsData((pre: any) => {
        return [...pre, info];
      });
    };
  }, []);

  const myref = useRef<any>(null);
  const [ws, setws] = useState<any>(null);
  const [wsData, setwsData] = useState<any>([]);

  const sendMsg = (key: number) => {
    if (key == 13) {
      const msg = myref.current.value;
      const msgToJson = JSON.stringify({ msg, id: 'he' });
      ws.send(msgToJson);
      myref.current.value = '';
    }
  };

  return (
    <div className="learn3">
      <div>
        <input
          type="text"
          ref={myref}
          onKeyDown={(event) => {
            sendMsg(event.keyCode);
          }}
        />
        <button onClick={() => sendMsg(13)}>发送</button>
      </div>

      {/* 聊天模版 */}
      <div className="talkWrap">
        {wsData.map((item: any, idx: any) => {
          if (item.id == 'he') {
            return (
              <p key={idx} style={{ textAlign: 'right' }}>
                {item.id}{item.msg}
              </p>
            );
          }
          return (
            <p key={idx}>
              {' '}
              {item.id}{item.msg}
            </p>
          );
        })}
      </div>
    </div>
  );
}

在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:30:49  更:2022-03-21 21:34:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:55:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码