【发布时间】:2020-07-16 05:16:48
【问题描述】:
我正在尝试为每个不同的客户端分配唯一的颜色(通过使用 socket.id )。在我的 map() 中,我已配对 (socket.id,randomcolor()),但此变量位于服务器端。我发现 require() 语句在客户端不起作用,
为什么会这样?有什么解决方案?我希望能够将
map()变量传递给客户端,以便它使用分配给该socket.id 的颜色并相应地显示颜色。
1234563用于发送消息,有可能知道吗?
这是我的服务器端:
var express = require('express');
var app = express();
app.use(express.static('public'))
var http = require('http').createServer(app);
var io = require('socket.io')(http);
const map = new Map();
io.on('connection', function(socket) {
console.log('connected by ' + socket.id);
map.set(socket.id, RandomColor())
socket.on('chat', function(data) {
//emitting to all sockets connected
io.emit('chat', data);
console.log(map.entries());
});
socket.on('typing', function(data) {
socket.broadcast.emit('typing', data);
})
});
http.listen(3000, function() {
console.log('listening on port 3000');
});
这里是客户端:
// import '../index';
var socket = io.connect('http://localhost:3000')
var message = document.getElementById('Message');
var handle = document.getElementById('Handle');
var btn = document.getElementById('Send');
var output = document.getElementById('Output');
var feedback = document.getElementById('Feedback');
var ids = []
console.log(server);
//emit event
btn.addEventListener('click', function() {
socket.emit('chat', {
message: message.value,
handle: handle.value,
})
})
message.addEventListener('keypress', function() {
socket.emit('typing', handle.value)
})
messageArray = []
//listening for any message received
socket.on('chat', function(data) {
// console.log(data);
feedback.innerHTML = ""
var item = document.createElement('li')
item.innerHTML = "<span style=\"font-family:\"cursive\";\" ;><strong>" + data.handle + ": " + data.message + "</strong></span>";
document.getElementById('Output').appendChild(item)
})
//listening for any typing event listener
socket.on('typing', function(data) {
feedback.innerHTML = "<p><strong>" + data + " is typing a message </strong></p>";
})
PS:另外,我是 JS 和 Socket.io 的新手,所以请对代码中的任何内容提出一些好的做法。
【问题讨论】:
标签: javascript node.js express socket.io serverside-javascript