Posteriormente a indagar en varios repositorios y páginas webs de internet al final nos encontramos con la respuesta que te mostramos a continuación.
Solución:
Básicamente, desea una sintaxis para enviar datos al WebSocket, recomiendo usar un objeto JSON para hacer esto. En su clase WebSocket necesita una variable local llamada subscriptions
y una variable local llamada users
al igual que.
clients = new SplObjectStorage;
$this->subscriptions = [];
$this->users = [];
public function onOpen(ConnectionInterface $conn)
$this->clients->attach($conn);
$this->users[$conn->resourceId] = $conn;
public function onMessage(ConnectionInterface $conn, $msg)
$data = json_decode($msg);
switch ($data->command)
case "subscribe":
$this->subscriptions[$conn->resourceId] = $data->channel;
break;
case "message":
if (isset($this->subscriptions[$conn->resourceId]))
$target = $this->subscriptions[$conn->resourceId];
foreach ($this->subscriptions as $id=>$channel)
if ($channel == $target && $id != $conn->resourceId)
$this->users[$id]->send($data->message);
public function onClose(ConnectionInterface $conn)
$this->clients->detach($conn);
unset($this->users[$conn->resourceId]);
unset($this->subscriptions[$conn->resourceId]);
public function onError(ConnectionInterface $conn, Exception $e)
echo "An error has occurred: $e->getMessage()n";
$conn->close();
?>
El javascript para ir con eso se parece un poco a esto
Nota: este código no está probado. Lo escribí sobre la marcha a partir de mi experiencia con Ratchet. Buena suerte 🙂
ok, ahora comparto mi experiencia. Puede enviar token e insertar este token en onOpen (server.php) en la base de datos. Puede insertar el token de chat cuando el usuario inicie sesión. Cada vez que se genera y actualiza un nuevo token de inicio de sesión de usuario. Ahora use este token para averiguar la identificación del usuario en la conexión onOpen.
var conn = new WebSocket('ws://172.16.23.26:8080?token=');
conn.onopen = function(e)
console.log("Connection established!");
;
Ahora Servidor.php
public function onOpen(ConnectionInterface $conn)
$this->clients->attach($conn);
$querystring = $conn->httpRequest->getUri()->getQuery();
parse_str($querystring,$queryarray);
//Get UserID By Chat Token
$objUser = new users;
$objUser->setLoginToken($queryarray['token']);
$GetUserInfo = $objUser->getUserByToken();
echo "New connection! ($conn->resourceId)n";
//save Chat Connection
// Insert the new connection with the user ID to Match to later if user ID in Table Then Update IT with a new connection
Ahora su conexión está establecida, luego envíe un mensaje a usuarios particulares
El lado del cliente envía ID de usuario con ID y mensaje recibidos
$("#conversation").on('click', '#ButtionID', function ()
var userId = $("#userId").val();
var msg = $("#msg").val();
var receiverId = $("#receiverId").val();
if ( userId != null && msg != null )
var data =
userId: userId,
msg: msg,
receiverId: receiverId
;
conn.send(JSON.stringify(data));
$("#msg").val("");
);
Lado del servidor
public function onMessage(ConnectionInterface $from, $msg)
$numRecv = count($this->clients) - 1;
echo sprintf('Connection %d sending message "%s" to %d other connection%s' . "n",$from->resourceId, $msg, $numRecv, $numRecv == 1 ? '' : 's');
$data = json_decode($msg, true);
echo $data['userId'];
echo $data['msg'];
echo $data['receiverId'];
// Save User ID receiver Id message in table
//Now Get Chat Connection by user id By Table Which is saved onOpen function
$UptGetChatConnection = $objChatroom->getChatConnectionUserID($data['receiverId']);
$ReciId = $UptGetChatConnection[0]['ConnectionID'];
foreach ($this->clients as $client)
if ($from == $client)
$data['from'] = "Me";
$data['fromname'] = 5;
else
$data['from'] = $user['name'];
$data['fromname'] = 6;
echo $client->resourceId;
echo $ReciId."n";
if($client->resourceId == $ReciId
ahora el mensaje se ha enviado por ID de conexión, no se transmite solo se envía a usuarios particulares