【发布时间】:2016-12-24 06:15:09
【问题描述】:
服务器-
var dgram = require('dgram');
var client= dgram.createSocket('udp4');
/** @requires socket.io */
var io = require('socket.io')(http);
/** Array of clients created to keep track of who is listening to what*/
var clients = [];
io.sockets.on('connection', function(socket, username){
/** printing out the client who joined */
console.log('New client connected (id=' + socket.id + ').');
/** pushing new client to client array*/
clients.push(socket);
/** listening for acknowledgement message */
client.on('message', function( message, rinfo ){
/** creating temp array to put data in */
var temp = [];
/**converting data bit to bytes */
var number= req.body.size * 2
/** acknowledgement message is converted to a string from buffer */
var message = message.toString();
/** cutting hex string to correspong to requested data size*/
var data = message.substring(0, number);
/** converting that data to decimal */
var data = parseInt(data, 16);
/** adding data to data array */
temp[0] = data
/** emitting message to html page */
socket.emit('temp', temp);
});
/** listening if client has disconnected */
socket.on('disconnect', function() {
clients.splice(clients.indexOf(client), 1);
console.log('client disconnected (id=' + socket.id + ').');
clearInterval(loop);
});
});
}
});
客户-
var socket = io.connect('192.168.0.136:3000');
socket.on(temp', function(temp){
var temp= temp.toString();
var message= temp.split(',').join("<br>");
$('#output').html('<output>' + message + '</output>');
});
当客户端连接时,会向客户端发出一个名为 temp 的随机数。当一个客户端连接到服务器时,上面的代码有效。现在你怎么能每次都设置一个新的连接?因此,如果打开一个选项卡,它会返回自己的随机消息,而当另一个选项卡打开时,它会返回自己的随机消息。
【问题讨论】:
-
您可以将 id 发送回客户端并将其保存到 localStorage(或变量或其他任何地方)。然后让客户收听专为该客户准备的“房间”。例如
var uuidSocket = io(serverHost + "/" + uuid); uuidSocket.on("Info", (data:any)=> { // do something on data });这个id / room 会被服务器用来通知具体的客户端。以此类推。 -
你能给我举个更好的例子吗?
-
我已经添加了一个答案,希望对你有帮助!
标签: javascript html node.js sockets socket.io