前端之vue3使用WebSocket

WebSocket

WebSocket说明

WebSocket 是全双工网络通信通信协议,实现了客户端和服务器的平等对话,任何一方都可以主动发送数据。并且在第一次建立后,就一直保持连接。

WebSocket图示

在这里插入图片描述

客户端使用WebSocket

vue3中, 客户端使用WebSocket步骤

  setup(props) {
    // 1.建立链接 -- 携带cookie参数
    var ws = new WebSocket(
      `ws://localhost:9000/judge/submit?satoken=${cookieValue}`
    );
    
    // 2. ws.send()给服务器发送信息
    let submitCode = JSON.stringify({
     userId: id,
      problemId: props.problemId,
      isDebug: "0",
      lang: lang.value,
      code: code.value,
      info: "",
    });

    ws.send(submitCode);
    
    // 3.服务器每次返回信息都会执行一次onmessage方法
    ws.onmessage = function (e) {
      console.log("服务器返回的信息: " + e.data);
      if (e.data === "judging") {
        showTitleClass.color = "green";
        showTitle.value = "judging...";
        showRes.value = "";
      } else if (e.data === "connected") {
        showTitleClass.color = "green";
        showTitle.value = "";
      } 
    };
	// 4.卸载前, 关闭链接
    onUnmounted(() => {
      ws.close();
    });
  },

更多方法

使用构造函数,新建ws实例

// 执行完本语句,客户端就会与服务器进行连接。
var ws = new WebSocket("wss://echo.websocket.org");

连接成功后的回调函数

ws.onopen = function(evt) { 
  console.log("Connection open ..."); 
  ws.send("Hello WebSockets!");
};
// 若需要多个回调  实例.addEventListener
// ws.addEventListener('open', function (event) {
//  ws.send('Hello Server!');
// });

用于指定收到服务器数据后的回调函数。
服务器数据可能是文本,也可能是二进制数据(blob对象或Arraybuffer对象)

ws.onmessage = function(evt) {
  console.log( "Received Message: " + evt.data);
  ws.close();
};

指定连接关闭后的回调函数。用法同open

ws.onclose = function(evt) {
  console.log("Connection closed.");
};      
  • 16
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
好的,关于前端Vue3和TypeScript实现Websocket单点登录,我可以给您提供一些思路和代码示例。 首先,我们需要安装`socket.io-client`库,用于在Vue3中建立和管理Websocket连接。可以通过以下命令进行安装: ``` npm install socket.io-client ``` 然后,我们可以在Vue3中创建一个`WebSocketService`类,用于管理Websocket连接和消息的发送和接收。以下是一个示例代码: ```typescript import { io, Socket } from "socket.io-client"; export class WebSocketService { private socket: Socket | undefined; public connect(url: string, token: string): void { this.socket = io(url, { auth: { token }, }); this.socket.on("connect", () => { console.log("Websocket connected!"); }); this.socket.on("disconnect", () => { console.log("Websocket disconnected!"); }); } public send(event: string, data: any): void { if (this.socket) { this.socket.emit(event, data); } else { console.error("Websocket not connected!"); } } public on(event: string, callback: (data: any) => void): void { if (this.socket) { this.socket.on(event, callback); } else { console.error("Websocket not connected!"); } } public off(event: string, callback: (data: any) => void): void { if (this.socket) { this.socket.off(event, callback); } else { console.error("Websocket not connected!"); } } public disconnect(): void { if (this.socket) { this.socket.disconnect(); } else { console.error("Websocket not connected!"); } } } ``` 这个类用于建立连接并验证用户身份,发送消息,监听消息,取消监听和断开连接。 在Vue3组件中,我们可以使用`setup`函数创建一个`WebSocketService`实例,并在需要的时候调用它的方法。以下是一个示例代码: ```typescript import { defineComponent, onMounted } from "vue"; import { WebSocketService } from "./WebSocketService"; export default defineComponent({ name: "WebSocketDemo", setup() { const webSocketService = new WebSocketService(); onMounted(() => { const url = "ws://localhost:3000"; const token = "mytoken"; webSocketService.connect(url, token); }); webSocketService.on("message", (data) => { console.log("Received message:", data); }); const sendMessage = () => { const data = { text: "Hello, world!" }; webSocketService.send("message", data); }; return { sendMessage, }; }, }); ``` 在这个组件中,我们在`onMounted`钩子中调用`connect`方法建立连接。然后,我们使用`on`方法监听`message`事件,并定义了一个`sendMessage`方法用于发送消息。 在实现Websocket单点登录时,我们需要在连接时向服务器发送用户的身份验证信息,例如token。在Vue3中,我们可以在`setup`函数中使用`reactive`或`ref`来定义一个全局的用户信息对象,并在连接时将其发送给服务器。以下是一个代码示例: ```typescript import { defineComponent, onMounted, reactive } from "vue"; import { WebSocketService } from "./WebSocketService"; export default defineComponent({ name: "WebSocketDemo", setup() { const userInfo = reactive({ token: "mytoken", username: "myusername", }); const webSocketService = new WebSocketService(); onMounted(() => { const url = "ws://localhost:3000"; webSocketService.connect(url, userInfo.token); }); webSocketService.on("message", (data) => { console.log("Received message:", data); }); const sendMessage = () => { const data = { text: "Hello, world!", userInfo, }; webSocketService.send("message", data); }; return { userInfo, sendMessage, }; }, }); ``` 在这个示例中,我们定义了一个`userInfo`对象,包含用户的token和username。在连接时,我们将`userInfo.token`发送给服务器进行身份验证。在发送消息时,我们将整个`userInfo`对象都发送给服务器,以便服务器可以根据需要进行身份验证和授权。 这就是一个简单的Vue3和TypeScript实现Websocket单点登录的示例。希望对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值