gpt4 book ai didi

javascript - 将 Socket.io 与连接到同一服务器的多个客户端一起使用

转载 作者:行者123 更新时间:2023-11-27 23:25:04 26 4
gpt4 key购买 nike

服务器-

  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 的随机数。当一个客户端连接到服务器时,上面的代码有效。现在你怎么能每次都设置一个新的连接?因此,如果打开一个选项卡,它会返回自己的随机消息,而当打开另一个选项卡时,它会返回自己的随机消息。

最佳答案

你可以试试这样:服务器端:

// you have your socket ready and inside the on('connect'...) you handle a register event where the client passes an id if one exists else you create one.

socket.on('register', function(clientUuid){ // a client requests registration
var id = clientUuid == null? uuid.v4() : clientUuid; // create an id if client doesn't already have one
var nsp;
var ns = "/" + id;

socket.join(id);
var nsp = app.io.of(ns); // create a room using this id that is only for this client
clientToRooms[ns] = nsp; // save it to a dictionary for future use

// set up what to do on connection
nsp.on('connection', function(nsSocket){
console.log('someone connected');

nsSocket.on('Info', function(data){
// just an example
});
});

客户端:

// you already have declared uuid, uuidSocket and have connected to the socket previously so you define what to do on register:
socket.on("register", function(data){
if (uuid == undefined || uuidSocket == undefined) {// first time we get id from server
//save id to a variable
uuid = data.uuid;

// save to localstorage for further usage (optional - only if you want one client per browser e.g.)
localStorage.setItem('socketUUID', uuid);

uuidSocket = io(serverHost + "/" + uuid); // set up the room --> will trigger nsp.on('connect',... ) on the server

uuidSocket.on("Info", function(data){
//handle on Info
});

// initiate the register from the client
socket.emit("register", uuid);

关于javascript - 将 Socket.io 与连接到同一服务器的多个客户端一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38999157/

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