AJAX request elke 10 seconde
Ik vroeg me af of het schadelijk is voor mijn database, als ik elke 10 seconde een ajax request doe om te kijken of er een nieuwe melding is, waarbij dus elke keer in de database wordt gekeken.
Alvast bedankt!
Opsich niet, helemaal niet als je nog eens een cachelaag er tussenin gebruikt.
Hoe doe ik dat?
Als je dat antwoord dan vervolgens 2 minuten cachet, dan kun je ook net zo goed om de 2 minuten die ajax - call doen.
ik ga dan even er vanuit dat het persoonlijk antwoord van de gebruiker is, en niet een bericht dat voor alle gebruikers van toepassing is.
Wel zou ik iets inbouwen dat als het een keer 23 seconden duurt voor je antwoord hebt, je niet de volgende 2 requests ook al afvuurt.
Bedenk ook, dat het dus niet om een request elke 10 seconden gaat, maar als er 100 man de pagina open hebben staan, je 100 requests krijgt elke 10 seconden = 10 requests per seconde.
Met een simpele query is dat geen probleem, maar vaak denkt men alleen per-persoon en niet voor meerdere gebruikers gelijktijdig
Je zou ook kunnen kijken naar sockets.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<a class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-envelope-o"></i>
<?php
$selectNewConvoSql = $mysqli->query(
"SELECT *
FROM `panel_convo`
WHERE `participants` LIKE '%\"" . $mysqli->real_escape_string($_SESSION['user']['id']) . "\"%'
AND `readed` NOT LIKE '%\"" . $mysqli->real_escape_string($_SESSION['user']['id']) . "\"%'"
);
if (
$selectNewConvoSql
&& $selectNewConvoSql->num_rows > 0)
{
$newConvo = $selectNewConvoSql->num_rows;
?>
<span class="label label-success">
<?php
echo $newConvo;
?>
</span>
<?php
}
?>
</a>
<ul class="dropdown-menu">
<li class="header">
Je hebt
<?php
if (isset($newConvo))
{
echo $newConvo;
}
else
{
echo '0';
}
?>
nieuwe conversatie(s)
</li>
<li>
<ul class="menu">
<?php
$selectAllConvoSql = $mysqli->query(
"SELECT *
FROM `panel_convo`
WHERE `participants` LIKE '%\"" . $mysqli->real_escape_string($_SESSION['user']['id']) . "\"%'
OR `starter_id` = '" . $mysqli->real_escape_string($_SESSION['user']['id']) . "'"
);
if (
!$selectAllConvoSql
|| $selectAllConvoSql->num_rows == 0
)
{
?>
<div class="box-body">
Geen conversaties gevonden
</div>
<?php
}
else
{
while ($convo = $selectAllConvoSql->fetch_assoc())
{
?>
<li>
<a href="#">
<div class="pull-left">
<img src="" class="img-circle" alt="Afbeelding van gebruiker">
</div>
<h4>
<?php
if (in_array($_SESSION['user']['id'], json_decode($convo['readed'])))
{
echo $convo['title'];
}
else
{
echo '<b>' . $convo['title'] . '</b>';
}
?>
<small>
<i class="fa fa-clock-o"></i>
<?php
echo date('H:i', $convo['created_on']);
?>
</small>
</h4>
<p>
<?php echo $convo['description']; ?>
</p>
</a>
</li>
<?php
}
}
?>
</ul>
</li>
<li class="footer">
<a href="#">
Zie alle conversaties
</a>
</li>
</ul>
<i class="fa fa-envelope-o"></i>
<?php
$selectNewConvoSql = $mysqli->query(
"SELECT *
FROM `panel_convo`
WHERE `participants` LIKE '%\"" . $mysqli->real_escape_string($_SESSION['user']['id']) . "\"%'
AND `readed` NOT LIKE '%\"" . $mysqli->real_escape_string($_SESSION['user']['id']) . "\"%'"
);
if (
$selectNewConvoSql
&& $selectNewConvoSql->num_rows > 0)
{
$newConvo = $selectNewConvoSql->num_rows;
?>
<span class="label label-success">
<?php
echo $newConvo;
?>
</span>
<?php
}
?>
</a>
<ul class="dropdown-menu">
<li class="header">
Je hebt
<?php
if (isset($newConvo))
{
echo $newConvo;
}
else
{
echo '0';
}
?>
nieuwe conversatie(s)
</li>
<li>
<ul class="menu">
<?php
$selectAllConvoSql = $mysqli->query(
"SELECT *
FROM `panel_convo`
WHERE `participants` LIKE '%\"" . $mysqli->real_escape_string($_SESSION['user']['id']) . "\"%'
OR `starter_id` = '" . $mysqli->real_escape_string($_SESSION['user']['id']) . "'"
);
if (
!$selectAllConvoSql
|| $selectAllConvoSql->num_rows == 0
)
{
?>
<div class="box-body">
Geen conversaties gevonden
</div>
<?php
}
else
{
while ($convo = $selectAllConvoSql->fetch_assoc())
{
?>
<li>
<a href="#">
<div class="pull-left">
<img src="" class="img-circle" alt="Afbeelding van gebruiker">
</div>
<h4>
<?php
if (in_array($_SESSION['user']['id'], json_decode($convo['readed'])))
{
echo $convo['title'];
}
else
{
echo '<b>' . $convo['title'] . '</b>';
}
?>
<small>
<i class="fa fa-clock-o"></i>
<?php
echo date('H:i', $convo['created_on']);
?>
</small>
</h4>
<p>
<?php echo $convo['description']; ?>
</p>
</a>
</li>
<?php
}
}
?>
</ul>
</li>
<li class="footer">
<a href="#">
Zie alle conversaties
</a>
</li>
</ul>
Hierboven staan de querys
Dat scheelt weer een hoop queries die je moet uitvoeren.
Of ben je zo handig geweest om bij de kolom participants meerdere id's op te slaan?
In dat geval heb je een probleem als user 10 iets zoekt, want dan komen de berichten van users 100 101 102 110 etc ook allemaal binnen
Toevoeging op 03/04/2017 20:12:12:
en bovenstaand script levert altijd output.
Doe eerst de query,
check dan of er *nieuwe* resultaten zijn
en als dat zo is: dan de berichten sturen naar de aanroepende ajax caller.
En in javascript: check OF er berichten zijn, en zo ja dan iets doen, zo nee: laten gaan
Nu even een vraag over hashen van wachtwoorden, is het niet het slimst om wachtwoorden zo te hashen:
Code (php)
1
2
3
4
2
3
4
$password = md5($password);
$password = sha1($password);
$password = hash('sha256', $password);
$password = password_hash($password, PASSWORD_DEFAULT);
$password = sha1($password);
$password = hash('sha256', $password);
$password = password_hash($password, PASSWORD_DEFAULT);
want zo kunnen ze volgensmij bijna niet het wachtwoord achterhalen *WINK*
Lang antwoord: https://crackstation.net/hashing-security.htm
Kun je hier aub een nieuw topic voor openen? Anders is het voor bezoekers totaal niet duidelijk waar een topic over gaat.