Пытаюсь реализовать мгновенные сообщения через сокеты, проблема заключается в том, что любое написанное сообщение могут читать все. Подскажите, пожалуйста, как я могу отправить сообщение только определенному пользователю?
var URL = 'ws://localhost:8181';
var chatClient = null;
function connect(){
chatClient = new WebSocket(URL);
chatClient.onmessage = function (event) {
var jsonObj = JSON.parse(event.data);
var messagesArea = $("#messageTable");
var trTable = document.createElement('tr');
var tdTable = document.createElement('td');
tdTable.className = 'message-from';
var aTable = document.createElement('a');
aTable.className = 'angled-img';
var adivTable = document.createElement('div');
adivTable.className = 'img';
adivTable.style = 'width:40px; margin-left:-10px;';
adivTable.innerHTML = '<img src="'+jsonObj.userPic+'">';
var spanTable = document.createElement('span');
spanTable.className = 'message-from-name';
//spanTable.style = 'margin-left:-60px;';
spanTable.innerHtml = '<?=$accinfo['username'];?>';
var spanDataTable = document.createElement('span');
spanDataTable.className = 'date';
//spanDataTable.style = 'margin-left:-60px;';
spanDataTable.innerHTML = '<?=$date?>';
var tdDescriptTable = document.createElement('td');
tdDescriptTable.className = 'message-description';
var msgDescriptTable = document.createElement('div');
msgDescriptTable.className = 'message-excerpt';
msgDescriptTable.innerHTML = jsonObj.message;
var tdActionTable = document.createElement('td');
tdActionTable.className = 'message-action';
var actTable = document.createElement('a');
actTable.className = 'message-delete';
var iTable = document.createElement('i');
iTable.className = 'fa fa-times';
trTable.appendChild(tdTable);
tdTable.appendChild(aTable);
aTable.appendChild(adivTable);
tdTable.appendChild(spanTable);
tdTable.appendChild(spanDataTable);
tdTable.appendChild(tdDescriptTable);
tdDescriptTable.appendChild(msgDescriptTable);
trTable.appendChild(tdActionTable);
tdActionTable.appendChild(actTable);
actTable.appendChild(iTable);
messagesArea.append(trTable);
$(".comments-block").animate({scrollTop: $(".comments-block")[0].scrollHeight}, -500);
};
}
connect();
function sendMessage() {
var convId = $("#conversation_id").val();
var usrfromId = $("#user_from").val();
var usrtoId = $("#user_to").val();
var userPic = '<?=$usrPhoto?>';
var inputElement = $("#mess").val();
if (inputElement !== "") {
var jsonObj = {"convId" : convId, "usrfromId" : usrfromId, "usrtoId" : usrtoId, "message" : inputElement, "userPic" : userPic};
chatClient.send(JSON.stringify(jsonObj));
}
}
function disconnect () {
chatClient.close();
}
C#
class Server
{
static readonly List<IWebSocketConnection> allSockets = new List<IWebSocketConnection>();
static readonly WebSocketServer server = new WebSocketServer("ws://0.0.0.0:8181");
static void Main()
{
FleckLog.Level = LogLevel.Debug;
server.Start(socket =>
{
socket.OnOpen = () =>
{
Console.WriteLine("Open!");
allSockets.Add(socket);
};
socket.OnClose = () =>
{
Console.WriteLine("Close!");
allSockets.Remove(socket);
};
socket.OnMessage = message =>
{
Console.WriteLine(message);
allSockets.ToList().ForEach(s => s.Send(message));
};
});
var input = Console.ReadLine();
while (input != "exit")
{
foreach (var socket in allSockets.ToList())
{
socket.Send(input);
}
input = Console.ReadLine();
}
}
static void SendToSocketById(String input, Guid id)
{
var socket = allSockets.Find(client => client.ConnectionInfo.Id == id);
socket.Send(input);
}
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники