gpt4 book ai didi

javascript - 如何检测从 Websocket 服务器发送的消息

转载 作者:行者123 更新时间:2023-12-04 14:10:30 24 4
gpt4 key购买 nike

我有一个小型 Web 应用程序,用于监听来自 Websocket 服务器的传入消息。我像这样接收它们

const webSocket = new WebSocket("wss://echo.websocket.org");
webSocket.onopen = event => webSocket.send("test");
webSocket.onmessage = event => console.log(event.data);

但发送服务器更复杂。可能会出现多种类型的消息,例如“UserConnected”、“TaskDeleted”、“ChannelMoved”
如何检测发送的消息类型?现在我将代码修改为

const webSocket = new WebSocket("wss://echo.websocket.org");

webSocket.onopen = event => {
const objectToSend = JSON.stringify({
message: "test-message",
data: "test"
});

webSocket.send(objectToSend);
};

webSocket.onmessage = event => {
const objectToRead = JSON.parse(event.data);

if (objectToRead.message === "test-message") {
console.log(objectToRead.data);
}
};

那么我是否必须从服务器发送一个包含“方法名称”/“消息类型”的对象,例如“TaskDeleted”确定在客户端执行的正确方法?那会导致一个很大的 switch case 语句,不是吗?
有没有更好的方法?

最佳答案

您可以通过直接映射方法来避免大的 switch-case 语句:

// List of white-listed methods to avoid any funny business
let allowedMethods = ["test", "taskDeleted"];

function methodHandlers(){
this.test = function(data)
{
console.log('test was called', data);
}

this.taskDeleted = function(data)
{
console.log('taskDeleted was called', data);
}
}


webSocket.onmessage = event => {
const objectToRead = JSON.parse(event.data);
let methodName = objectToRead.message;
if (allowerMethods.indexOf(methodName)>=0)
{
let handler = new methodHandlers();
handler[methodName](data);
}
else
{
console.error("Method not allowed: ", methodName)
}
};

关于javascript - 如何检测从 Websocket 服务器发送的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64749018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com