Chat App with Socket.Io - 发送和接收消息的区别
Chat App with Socket.Io - Difference between sending and receiving a message
我正在尝试为一个学校项目创建一个小聊天应用程序,但我遇到了一个小问题,因为我是 socket.io // node.js(一般编码)的新手.英语不是我的第一语言,所以我发现很难从教程中真正理解它是如何工作的。
现在我有 2 css 类,一个用于发送的消息,一个用于接收的消息。我该怎么做才能让 类 对每条消息应用正确的方式?
如何检查哪些消息是我发送的,哪些是其他用户收到的?我真的不清楚。
服务器端代码:
const http = require('http').createServer();
const io = require('socket.io')(http, {
cors:{origin: "*" }
});
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('message', (message) => {
console.log(message);
io.emit('message', `${message}`);
});
});
http.listen(8080, () => console.log('listening on http://localhost:8080'));
客户端代码:
const socket = io('ws://localhost:8080');
const sendBtn = document.getElementById('sendBtn');
const messageInput = document.getElementById('messageInput');
const messagesContainer = document.getElementById('messagesContainer');
const chatBigContainer = document.getElementById('chatBigContainer');
socket.on('message', text => {
const divEl = document.createElement('div');
divEl.className = "your-message";
messagesContainer.appendChild(divEl);
const labelEl = document.createElement('label');
labelEl.innerHTML = "You";
divEl.appendChild(labelEl);
let messageSent = document.createElement('p');
messageSent.innerHTML = text;
divEl.appendChild(messageSent);
})
sendBtn.addEventListener('click', () =>{
if(messageInput.value === ""){
return;
} else {
const text = messageInput.value;
socket.emit('message', text);
messageInput.value = "";
}
})
据我了解,您在发送任何文本时并未创建任何元素。相反,您向所有人发出了相同的信息:
io.emit('message', `${message}`);
这样您就认为您实际上是在为发送和接收创建 HTML div。
首先你的服务器代码应该是:
socket.broadcast.emit('message', `${message}`);
(这会发送给除发件人以外的所有人,并且应该适用于您有 2 个用户的简单案例。稍后您将需要房间)
这将表明您在发送消息时实际上并未创建任何元素。
socket.on('message', text => {
})
sendBtn.addEventListener('click', () =>{
if(messageInput.value === ""){
return;
} else {
const text = messageInput.value;
socket.emit('message', text);
const divEl = document.createElement('div');
divEl.className = "your-message";
messagesContainer.appendChild(divEl);
const labelEl = document.createElement('label');
labelEl.innerHTML = "You";
divEl.appendChild(labelEl);
let messageSent = document.createElement('p');
messageSent.innerHTML = text;
divEl.appendChild(messageSent);
messageInput.value = "";
}
})
用你的类名和标签替换上面的内容
为什么你有两个 类 用于发送和接收消息? socket.emit
将向所有客户端发送消息,然后您可以附加消息。
如 socket.io 聊天教程 (https://socket.io/get-started/chat) 所示:
其次,如果你想查看哪些用户是哪些用户,你可以给用户分配一个socket.id
,就像这样。
io.on('connection', function(socket) {
console.log(`A user connected. ID: ${socket.id}`)
socket.on('disconnect', function() {
console.log(`A user disconnected. ID: ${socket.id}`);
});
});
这样,每个用户都有一个唯一的套接字ID。也许这可以帮助你?我有点不确定你在问什么。
我正在尝试为一个学校项目创建一个小聊天应用程序,但我遇到了一个小问题,因为我是 socket.io // node.js(一般编码)的新手.英语不是我的第一语言,所以我发现很难从教程中真正理解它是如何工作的。 现在我有 2 css 类,一个用于发送的消息,一个用于接收的消息。我该怎么做才能让 类 对每条消息应用正确的方式? 如何检查哪些消息是我发送的,哪些是其他用户收到的?我真的不清楚。
服务器端代码:
const http = require('http').createServer();
const io = require('socket.io')(http, {
cors:{origin: "*" }
});
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('message', (message) => {
console.log(message);
io.emit('message', `${message}`);
});
});
http.listen(8080, () => console.log('listening on http://localhost:8080'));
客户端代码:
const socket = io('ws://localhost:8080');
const sendBtn = document.getElementById('sendBtn');
const messageInput = document.getElementById('messageInput');
const messagesContainer = document.getElementById('messagesContainer');
const chatBigContainer = document.getElementById('chatBigContainer');
socket.on('message', text => {
const divEl = document.createElement('div');
divEl.className = "your-message";
messagesContainer.appendChild(divEl);
const labelEl = document.createElement('label');
labelEl.innerHTML = "You";
divEl.appendChild(labelEl);
let messageSent = document.createElement('p');
messageSent.innerHTML = text;
divEl.appendChild(messageSent);
})
sendBtn.addEventListener('click', () =>{
if(messageInput.value === ""){
return;
} else {
const text = messageInput.value;
socket.emit('message', text);
messageInput.value = "";
}
})
据我了解,您在发送任何文本时并未创建任何元素。相反,您向所有人发出了相同的信息:
io.emit('message', `${message}`);
这样您就认为您实际上是在为发送和接收创建 HTML div。 首先你的服务器代码应该是:
socket.broadcast.emit('message', `${message}`);
(这会发送给除发件人以外的所有人,并且应该适用于您有 2 个用户的简单案例。稍后您将需要房间)
这将表明您在发送消息时实际上并未创建任何元素。
socket.on('message', text => {
})
sendBtn.addEventListener('click', () =>{
if(messageInput.value === ""){
return;
} else {
const text = messageInput.value;
socket.emit('message', text);
const divEl = document.createElement('div');
divEl.className = "your-message";
messagesContainer.appendChild(divEl);
const labelEl = document.createElement('label');
labelEl.innerHTML = "You";
divEl.appendChild(labelEl);
let messageSent = document.createElement('p');
messageSent.innerHTML = text;
divEl.appendChild(messageSent);
messageInput.value = "";
}
})
用你的类名和标签替换上面的内容
为什么你有两个 类 用于发送和接收消息? socket.emit
将向所有客户端发送消息,然后您可以附加消息。
如 socket.io 聊天教程 (https://socket.io/get-started/chat) 所示:
其次,如果你想查看哪些用户是哪些用户,你可以给用户分配一个socket.id
,就像这样。
io.on('connection', function(socket) {
console.log(`A user connected. ID: ${socket.id}`)
socket.on('disconnect', function() {
console.log(`A user disconnected. ID: ${socket.id}`);
});
});
这样,每个用户都有一个唯一的套接字ID。也许这可以帮助你?我有点不确定你在问什么。