"Private" Nachrichten werden trotz ihres Namens gebroadcastet
nein, guckst Du:
if(my $tosid = $msgobj->{tosid}){
for ($conn->server->connections){
next if $_->{SID} ne $tosid;
$_->send_utf8($msg);
}
}
else{
$_->send_utf8($msg) for $conn->server->connections;
}
Broadcast ist im else{}-Zweig.
Außerdem kann ich im Socket Session-IDs von anderen Teilnehmern sehen
Die siehst du auch schon im Browser /HTML. Die gibt es nur wegen der Zuordnung, die SID wird bereits beim Verbindungsaufbau mitgenommen damit die auch auf dem Server bekannt ist. Diese SID gibt es nur einmal im Serverprozess, das Mitlesen von Nachrichten die nicht an die eigene SID gerichtet sind, ist gar nicht möglich.
Deinen Test betreffend: Verbunden waren stets test1, test2 oder test3 nacheinander, also nicht gleichzeitig, was das Serverlog bestätigt.
Log-Auszug:
{"sid":"c835beb5790d9b883eb1393803441ef4","nickname":"test3","time":"15:01:28","tosid":"c835beb5790d9b883eb1393803441ef4","joined":"olf ? test3","mesg":"private test 3 -> 2"}
Die Private Nachricht ist an dieselbe SID gegangen.
MfG