WebSocket 前端node启用ws调试

server.js

<!-- WebSocket 实时通信 -->

<!-- 2 npm install ws -->

<!-- 3 npm list ws 看安装上没-->

<!-- 本地起websocket 创建 WebSocket 服务器文件 server.js -->

<!-- 4 4️⃣ 启动服务器 node server.js -->

复制代码
<!-- WebSocket 实时通信 -->
<!-- 2 npm install ws -->
 <!-- 3 npm list ws  看安装上没-->
<!-- 本地起websocket 创建 WebSocket 服务器文件 server.js -->
 <!-- 4 4️⃣ 启动服务器 node server.js -->
<template>
  <div class="websocket-chat">
    <div class="chat" style="border: 1px solid #ccc; padding: 10px; height: 200px; overflow-y: auto;">
      <p v-for="(msg, index) in messages" :key="index">{{ msg }}</p>
    </div>
    <input
      type="text"
      v-model="messageInput"
      placeholder="Type your message"
      @keyup.enter="sendMessage"
      style="margin-top: 10px; padding: 5px;"
    />
    <button @click="sendMessage" style="margin-left: 5px; padding: 5px 10px;">Send</button>
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount } from 'vue'

const messages = ref<string[]>([])
const messageInput = ref('')
let socket: WebSocket | null = null
const isConnected = ref(false) // 标识连接状态

onMounted(() => {
  try {
    socket = new WebSocket('ws://localhost:8888')
    // 带token
    // socket = new WebSocket(`wss://api.example.com/ws?token=${userToken}`)

    socket.onopen = (event) => {
      console.log('WebSocket connection opened:', event)
      isConnected.value = true
      messages.value.push('✅ 已连接 WebSocket 服务器')
    }

    socket.onmessage = (event) => {
        //   messages.value.push(`${data.userName}: ${data.content}`)
      messages.value.push('收到: ' + event.data)
    }

    socket.onclose = (event) => {
      console.log('WebSocket connection closed:', event)
      isConnected.value = false
      messages.value.push('❌ WebSocket 已关闭')
    }

    socket.onerror = (event) => {
      console.error('WebSocket error:', event)
      isConnected.value = false
      messages.value.push('⚠️ WebSocket 出错或未连接')
    }
  } catch (error) {
    console.error('WebSocket 初始化失败:', error)
    messages.value.push('⚠️ WebSocket 初始化失败')
  }
})

onBeforeUnmount(() => {
  socket?.close()
})

const sendMessage = () => {
  if (!isConnected.value) {
    messages.value.push('⚠️ 发送失败,WebSocket 未连接')
    return
  }
  if (socket && socket.readyState === WebSocket.OPEN && messageInput.value.trim() !== '') {
/*     socket.send(JSON.stringify({
  type: 'chat',
  content: messageInput.value,
  userId: currentUserId
})) */
    socket.send(messageInput.value)
    messages.value.push('发送: ' + messageInput.value)
    messageInput.value = ''
  }
}
</script>

<style scoped>
.websocket-chat input {
  width: 300px;
}
</style>

server.js文件

复制代码
server.js
// server.js (ES Module)
import { WebSocketServer } from 'ws'

// 创建 WebSocket 服务器,监听 8888
const wss = new WebSocketServer({ port: 8888 }, () => {
  console.log('WebSocket 服务器已启动,端口 8888')
})

wss.on('connection', (ws) => {
  console.log('客户端已连接')
  ws.send('欢迎连接本地 WebSocket 服务器!')

  ws.on('message', (message) => {
    console.log('收到客户端消息:', message)

    // 广播给所有客户端
    wss.clients.forEach((client) => {
      if (client.readyState === ws.OPEN) {
        client.send(`广播: ${message}`)
      }
    })
  })

  ws.on('close', () => {
    console.log('客户端断开连接')
  })

  ws.on('error', (err) => {
    console.error('WebSocket 错误:', err)
  })
})
相关推荐
liangshanbo121523 分钟前
React Fiber:从“解决卡顿”到完整更新链路
前端·javascript·react.js
自己的九又四分之三站台24 分钟前
TCP 与 UDP:从可靠字节流到无连接数据报,怎么选、怎么测
网络协议·tcp/ip·udp
Timmy31 分钟前
前端转全栈笔记:讲框架之前,先把 TypeScript 这关过了
前端·人工智能·node.js
计算机魔术师36 分钟前
年收入650亿、亏420亿,Anthropic凭什么敢叫价万亿?
前端
Frag0ut37 分钟前
Chrome Canary 最新实验功能:AI Mode、按设备筛选历史记录与 Gemini 自动改密
前端·人工智能·chrome·dev·beta·canary·最新实验功能
anew___1 小时前
《从零手写操作系统 (19):Ext2文件系统实战——从内存到磁盘的跨越》
java·服务器·前端·数据库·算法
吴声子夜歌1 小时前
Nginx应用与运维——Nginx Web服务应用实战(HTTPS安全服务器的搭建)
运维·前端·nginx
liangshanbo12151 小时前
Monorepo 工程化面试题:如何设计 Web + Node.js 中间层 + Shared + Scripts 的 Monorepo?
前端·node.js
IT_陈寒1 小时前
Redis集群切换主节点时,服务竟然全员掉线
前端·人工智能·后端
wangbing11251 小时前
开发指南147-WebSocket-前端
前端·websocket·网络协议