<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
// create a ws-server. all your users will connect to it
$ws_worker = new Worker("websocket://192.168.2.163:1000");
$ws_worker->count = 4;// it will create 4 process
// storage of user-connection link
$users = [];
$ws_worker->onConnect = function($connection) use (&$users)
{
$connection->onWebSocketConnect = function($connection) use (&$users)
{
// поместите get-параметр в коллекцию $users при подключении нового пользователя
// на странице сайта можно задать любой параметр. например client.html: ws = new WebSocket("ws://127.0.0.1:8000/?user=tester01");
$users[$_GET['user']] = $connection;
// or you can use another parameter for user identification, for example $_COOKIE['PHPSESSID']
};
};
$ws_worker->onClose = function($connection) use(&$users)
{
if(isset($users[$connection->uid]))
{
// unset parameter when user is disconnected
unset($users[$connection->uid]);
}
};
// it will start once for each of the 4 ws-servers when you start server.php:
$ws_worker->onWorkerStart = function() use (&$users)
{
//each ws-server connects to the local tcp-server
$connection = new AsyncTcpConnection("tcp://127.0.0.1:1005");
$connection->onMessage = function($connection, $data) use (&$users) {
// you have to use json_decode for $data because send.php uses json_encode
$data = json_decode($data); // but you can use another protocol for send data send.php to local tcp-server
// отправить сообщение пользователю по Имя пользователя
if (isset($users[$data->user])) {
$webconnection = $users[$data->user];
$webconnection->send($data->message);
}
};
$connection->connect();
};
// создайте локальный tcp-сервер. он будет получать сообщения с вашего кода сайта (например, от send.РНР)
$tcp_worker = new Worker("tcp://127.0.0.1:1005");
// создайте обработчик, который будет вызываться, когда локальный tcp-сокет получает сообщение (например, от send.РНР)
$tcp_worker->onMessage = function($connection, $data) use ($tcp_worker)
{
// переадресация сообщения на все остальные процессы (у вас есть 4 ws-сервера)
foreach ($tcp_worker->connections as $id => $webconnection) {
if ($connection->id != $id) {
$webconnection->send($data);
}
}
};
// Run worker
Worker::runAll();
<?php
$localsocket = 'tcp://127.0.0.1:1005';
$user = $_POST['id'];
$message = $_POST['text'];
// соединяемся с локальным tcp-сервером
$instance = stream_socket_client($localsocket);
// отправляем сообщение
fwrite($instance, json_encode([
user => $user,
message => $message
]));
function choiceNotific(){
$("a.notif-list").on("click", function(){
var id = $(this).attr("id");
// Вывод существующих сообщений
$.ajax({
type: 'POST',
url: 'chat-manager.php',
data:{
idNotific: id,
key: 2
},
success:function(response){
data = JSON.parse(response);
$('#messages').html(data['m']);
var idClient = data['idClient'],
url = 'ws://192.168.2.163:1000/?user='+idClient,
ws = new WebSocket(url); // Подключение к серверу
// Работа с Веб сокетом
ws.addEventListener('message', (event) => {
console.log(event.data);
});
}
});
}
function webSocket(){
var text = $('#text-client').val(),
id = getCookie('idClient');
$.ajax({
type: 'POST',
url: 'send.php',
data:{
id: id,
text: text
}
});
}
SELECT * FROM `"._TABLE_."` USE INDEX(status,id_d) WHERE status=0 HAVING id_d=".$i."
// Редактировать
$("td a.editing").on("click", function(){
id = $(this).attr("id");
$("#blockDataRemoval,#blockCreateEmployee").hide();
$("#blockDataСhange").show();
....
//Добавить
$("#createEmployee").on("click", function(){
$("#blockDataRemoval,#blockDataСhange").hide();
$("#blockCreateEmployee").show();
});
//Удалить
$("td a.removal").on("click", function(){
id = $(this).attr("id");
$("#blockCreateEmployee,#blockDataСhange").hide();
$("#blockDataRemoval").show();
....
кроме того их при каждой перезагрузке аяксом придется переназначать т.к. это новые контролы, либо генерите ссылки обычные в href
$("#createEmployee").on("click", function(){
$("#blockDataRemoval").hide();
$("#blockDataСhange").hide();
$("#blockCreateEmployee").toggle();
});
$("td a.editing").on("click", function(){
var val = $(this).attr("id");
console.log(val);
$("#blockDataRemoval").hide();
$("#blockCreateEmployee").hide();
$("#blockDataСhange").toggle();
});
$("td a.removal").on("click", function(){
var val = $(this).attr("id");
console.log(val);
$("#blockCreateEmployee").hide();
$("#blockDataСhange").hide();
$("#blockDataRemoval").toggle();
});
'<td><a id="'.$value[0].'" class="editing" href="#"><i class="ion-compose"></i></a></td>'.
'<td><a id="'.$value[0].'" class="removal" href="#"><i class="ion-close-round"></i></a></td>';
<a id="createEmployee" class="btn btn-success m-b-0 waves-effect waves-light js-programmatic-enable">Добавить сотрудника</a>
<div id="blockCreateEmployee" class="noactivesCreate">
</div>
<div id="blockDataСhange" class="noactivesCreate">
</div>
<div id="blockDataRemoval" class="noactivesCreate">
</div>