nodejs的ws+vue3编写聊天室的demo

nodejs编写ws服务是非常简单高效的,nodejs有众多的实现ws的库,如ws,SocketIO等,nodejs的事件线程是单线程的,所以不要在事件线程内做阻塞性的操作,耗时的操作交给工作线程或者子进程操作。

我使用nodejs+vue3实现了写了个简单的聊天室demo

1.nodejs服务端代码

node init初始化项目
安装ts
具体可以看我nodejs 使用ts的文章
安装ws的库

npm install ws
npm install @types/ws
import {WebSocketServer,WebSocket} from 'ws';

const wss = new WebSocketServer( {port:3000});

wss.on('connection',(ws)=>{
    console.info('new connection join',ws);
    ws.on('message',(data)=>{

        wss.clients.forEach((client=>{
            if (client.readyState === WebSocket.OPEN) {
                client.send(data,{binary:false});
              }
        }))

        console.info('get msg from client',(new String(data)).toString());
    })
 
});

console.log('start success');

在这里插入图片描述

2. vue3连接客户端

使用游览器自带的WebSocket对象连接ws服务,使用ws库的WebSocket对象在游览器运行时会报错,存在一定的问题,

<script setup lang="ts">
import { onMounted, ref } from "vue"
import { Msg } from "@/model"

const props=defineProps<{
  username: string
}>();

const toSendMsg = ref("");

const username=props.username;

const receiveMsgList = ref<Msg[]>([])

const ws = new WebSocket('ws://localhost:3000');

onMounted(() => {
  // WebSocket 服务器的 URL
  const wsUrl = 'ws://localhost:3000';

// 创建 WebSocket 连接
const ws = new WebSocket(wsUrl);

// 监听连接成功事件
ws.addEventListener('open', function () {
  console.log('Connected to WebSocket server');

  // 发送消息给服务器
});

// 监听接收到消息事件
ws.addEventListener('message', function (event) {
  
  console.log('Blob content as string:', event.data);
  receiveMsgList.value.push(JSON.parse(event.data))

});

// 监听连接关闭事件
ws.addEventListener('close', function () {
  console.log('Disconnected from WebSocket server');
});

// 监听连接错误事件
ws.addEventListener('error', function (error) {
  console.error('WebSocket error:', error);
});
})

function sendMsg(){
  const msgInfo= new Msg(username,toSendMsg.value)
  ws.send(JSON.stringify(msgInfo));
  toSendMsg.value="";
}

</script>

<template>
  <el-col :span="6">
    <div class="chart-out-box">
      <div class="chart-room-head">
        <el-scrollbar height="400px">
          <div v-for="(item, index) in receiveMsgList" :key="index">
            <p v-if="item.username == username" class="scrollbar-demo-item scrollbar-demo-is-own">


              {{item.content}}<span>{{ ":"+username }}</span>
              </p>
              <p v-else class="scrollbar-demo-item scrollbar-demo-is-other">

<span>{{item.username}}:</span>{{ item.content }}</p>
          </div>
          
        </el-scrollbar>
      </div>
      <div class="chart-room-footer">
        <el-input v-model="toSendMsg" style="width: 240px" :rows="4" type="textarea" placeholder="Please input" />
        <el-button type="success" style="margin-left:20px" @click="sendMsg">发送</el-button>
      </div>
    </div>
  </el-col>

</template>

<style lang="scss" scoped>
.chart-out-box {
  border: 1px solid blue;
  height: 400px;
}

.chart-room-head {
  height: 70%;
  border: 1px solid green;
  ;
}

.chart-room-footer {}

.scrollbar-demo-item {
  display: flex;
  align-items: center;
  height: 50px;
  margin: 10px;
  text-align: center;
  border-radius: 4px;
  background: var(--el-color-primary-light-9);
  color: var(--el-color-primary);
}

.scrollbar-demo-is-own {
  justify-content: right;
}

.scrollbar-demo-is-other {
  justify-content: left;
}

</style>

3.演示

在这里插入图片描述

4.git代码

https://github.com/haozhi-ly/chatroom-demo

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
对于Vue3和WebSocket聊天室,可以根据以下步骤进行实现: 1. 首先,创建一个Vue3的项目并安装Vue3和WebSocket的依赖。可以使用Vue CLI来创建项目,并使用npm或yarn来安装依赖。 2. 在Vue3的项目中,可以使用Vue的Composition API来处理WebSocket的逻辑。通过引入WebSocket库,可以在Vue组件中创建WebSocket实例,并使用其提供的方法进行连接、发送消息和接收消息。 3. 在Vue组件中,可以创建一个WebSocket连接,并在组件的生命周期钩子中进行连接的初始化。可以使用`onopen`事件监听连接是否成功,`onmessage`事件监听接收到的消息,以及`onclose`事件监听连接关闭的情况。 4. 在Vue组件中,可以定义发送消息的方法,将要发送的消息作为参数传入WebSocket的`send`方法。 5. 在Vue模板中,可以使用`v-for`指令来循环渲染消息列表,可以使用`v-model`指令来双向绑定输入框的内容,并在发送按钮上绑定发送消息的方法。 6. 可以在Vue组件中使用计算属性来对接收到的消息进行处理,例如格式化时间、过滤敏感词等。 7. 最后,可以在Vue组件中使用样式和布局来美化聊天室的界面,例如设置消息框的样式、聊天框的大小等。 通过以上步骤,你可以实现一个基于Vue3和WebSocket聊天室。这样的聊天室可以实现实时通信,并且不需要轮询服务器,节省了资源并提高了效率。如果你需要更具体的代码示例和详细的配置说明,可以参考提供的使用Java和Vue2.0开发的WebSocket聊天室Demo

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值