gpt4 book ai didi

javascript - node.js - socket.get 应该在客户端上工作吗?

转载 作者:行者123 更新时间:2023-12-02 17:55:12 24 4
gpt4 key购买 nike

我是 node.js 新手,我正在制作一个简单的聊天应用程序来开始。我对 socket.setsocket.get 方法有点困惑。

应用程序的工作方式是 - 首先客户端设置其用户名():

function setPseudo() {
if ($("#pseudoInput").val() != "")
{
socket.emit('setPseudo', $("#pseudoInput").val());
$('#chatControls').show();
$('#pseudoInput').hide();
$('#pseudoSet').hide();
}
}

在服务器上,伪值是通过以下方式获取的:

socket.on('setPseudo', function (data) {
socket.set('pseudo', data);
});

如果我理解正确,服务器会使用从该特定客户端接收到的数据来设置pseudo变量。服务器稍后可以使用 socket.get 获取该变量。以下代码将消息从客户端广播到所有客户端:

socket.on('message', function (message) {
socket.get('pseudo', function (error, name) {
var data = { 'message' : message, pseudo : name };
socket.broadcast.emit('message', data);
console.log("user " + name + " send this : " + message);
})
});

我不明白的是,为什么客户端本身不能使用 socket.get 来获取自己的伪值?使用 socket.get('pseudo') 会出现错误,提示 socket.get 不是函数。或者我是否过于复杂化了,最好将伪值存储在客户端的隐藏字段或类似的字段中?客户端必须从服务器获取自己的用户名,这感觉很奇怪。

编辑:

单击“发送”后,此代码会在客户端本身上显示已发送的消息。然而,显示的用户名是“Me”。如何修改它以显示来自服务器的客户端用户名?

addMessage($('#messageInput').val(), "Me", new Date().toISOString(), true);
function addMessage(msg, pseudo) {
$("#chatEntries").append('<div class="message"><p>' + pseudo + ' : ' + msg + '</p></div>');
}

最佳答案

你必须意识到,虽然socket是服务器和客户端都使用的名称,并且接口(interface)类似,但它们是两个独立的东西。 (即服务器套接字和客户端套接字)描述一个连接的两端。

如果服务器在套接字上设置一些数据,它实际上所做的是将一些数据保存在自己的内存中,并记住该数据与套接字关联。那么客户端如何从服务器内存中读取数据呢?机器A如何从机器B的内存中读取数据?好吧,唯一(合理的)可能性是通过网络发送该数据,这实际上就是发生的情况。

至于另一个问题:客户端从服务器获取自己的名称或至少验证该名称实际上是很自然的。考虑以下场景:两个客户端连接到服务器并使用相同的名称。这会导致冲突,因此由服务器来解决问题。基本上,您会告诉其中一位客户“抱歉,该名称已被使用,请使用其他名称”。

关于javascript - node.js - socket.get 应该在客户端上工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21020618/

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