Skip to content

Commit af5db2d

Browse files
Merge pull request #18 from CppComet/alfa
3.22
2 parents 2324304 + 1336cc6 commit af5db2d

File tree

83 files changed

+4584
-87
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+4584
-87
lines changed

CHANGELOG.md

+22-8
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,44 @@
11
## Next Release
22

3-
BREAKING CHANGES:
4-
FEATURES:
5-
IMPROVEMENTS:
3+
BREAKING CHANGES:
4+
FEATURES:
5+
IMPROVEMENTS:
6+
BUG FIXES:
7+
8+
## v3.22
9+
610
BUG FIXES:
711

12+
* last online time did not save
13+
14+
IMPROVEMENTS:
15+
16+
* Added functions for aggregating statistics of using server
17+
* Added settings to .ini file for controll content-type header
18+
* Added dosc in dokuwiki format
19+
* Was translated comments in comet.ini
20+
* Added the white list of hosts to .ini file
21+
822
## v3.21
923

1024
IMPROVEMENTS:
1125

1226
* Added caching in memory for sending static files
1327
* Added cache-control headers for get requests
14-
28+
1529
## v3.2
1630

1731
BUG FIXES:
1832
* Js Api version 3.28 (Fix bug in auth callbacks)
1933
* Fix bug in auth callbacks
2034
* complete api function getTrackPipeUsers
21-
35+
2236
## v3.1
23-
24-
FEATURES:
37+
38+
FEATURES:
2539

2640
* Added function to getting users in track_pipes from js api
27-
* Added deleting api query for pipes history #5
41+
* Added deleting api query for pipes history #5
2842
* Added CODE_OF_CONDUCT.md
2943
* Added CONTRIBUTING.md
3044
* Added CHANGELOG.md

comet.ini

+19-27
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
1-
[main]
2-
isTest = false; включение тестов
3-
4-
node_name = n1
5-
useQueryLoger = false
6-
7-
; пароль для доступа к api комет сервера
8-
;password = 0000000000000000000000000000000000000000000000000000000000000000
1+
[main]
2+
3+
; Password for accessing comet server api
4+
password = 0000000000000000000000000000000000000000000000000000000000000000
95

106
[db]
117
host = localhost
@@ -15,36 +11,32 @@ name = comet_db
1511
port = 3305
1612

1713
[ws]
18-
ip = 0.0.0.0
19-
backlog = 10000
20-
epoll_size = 100000
21-
thread_num = 12
22-
benchmark = 1 ;Интервал между замерами нагрузки (0 = не замерять)
23-
port = 8087 ; При подключении в js api не забудте указать порт в параметре node
24-
uptimeTestInterval = 600 ; Интервал для проверок uptime у соединений (так же за одно выправляет значение счётчика пользователей онлайн)
25-
maxUptime = 0 ; Максимально значение uptime после которого конект отключается.
14+
ip = 0.0.0.0
15+
thread_num = 4 ; number of threads for receive message from websockets
16+
statistics = 10 ;Interval between load measurements (0 = not measured)
17+
port = 8087 ; When connecting to js api, do not forget to specify the port in the node parameter
18+
uptimeTestInterval = 600 ; The interval for checking the uptime of the connections (it also corrects the value of the online user count for one)
19+
maxUptime = 0 ; The maximum value of uptime after which the connection is disconnected.
20+
host = * ; comma separated hosts from which allows receiving connections, or asterisk symbol for allowing connections from any host
2621

2722
[cometql]
28-
ip = 0.0.0.0
29-
backlog = 1000
30-
epoll_size = 10000
31-
thread_num = 4
32-
benchmark = 0
23+
ip = 0.0.0.0
24+
thread_num = 3 ; number of threads for receive message from cometql
25+
statistics = 10
3326
port = 3300
3427
uptimeTestInterval = 600
3528
maxUptime = 0
36-
37-
[benchmark]
38-
to_log = false ; Вывод замеров о нагрузке в лог
39-
29+
4030
[log]
41-
level = 500
31+
level = 200; Logging level (600 output all, 200 errors only)
4232

33+
; Logging levels for individual subsystems
34+
; Change only if debugging is necessary
4335
Any = 500
4436
TagLoger = 500
4537
appConf = 500
4638
pipeCommands = 500
47-
benchmark = 500
39+
statistics = 500
4840
removeOldConnections = 500
4941
MySqlServer = 500
5042
UserIndex = 500
262 KB
Loading
88.9 KB
Loading
Loading
90.3 KB
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
57.2 KB
Loading
27.2 KB
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<rst>RU::002-API::004-Авторизация пользователей на комет сервере</rst>
2+
3+
====== Авторизация пользователей ======
4+
5+
Помимо каналов где каждый кто знает имя канала может подписаться на него, есть возможность авторизации пользователей на комет сервере и отправки личных сообщений пользователям по их идентификаторам. Авторизация пользователя происходит в 2 этапа. Первый этап это отправка идентификатора пользователя в вашей системе и случайного хеша в комет сервер.
6+
7+
<code sql>
8+
mysql> INSERT INTO users_auth (id, hash )VALUES (1, 'auth_hash1');
9+
</code>
10+
* Здесь строка auth_hash1 - это текстовый ключ авторизации. Вы его сами генерируете на своём сервере и отправляете сначала в комет по средствам insert запроса в таблицу users_auth, а затем передаёте в JavaScript для авторизации конкретного пользователя на комет сервере.
11+
* Числовой_Идентификатор_пользователя - Это id пользователя на вашем сайте, любое целое положительное число не более чем из 9 цифр.
12+
13+
<code JavaScript>
14+
// На втором этапе эти сведения (идентификатор пользователя и хеш) надо передать в JavaScript Api
15+
$(document).ready(function()
16+
{
17+
CometServer().start({dev_id:15, user_key:"auth_hash1", user_id:"Числовой_Идентификатор_пользователя" })
18+
});
19+
</code>
20+
И теперь пользователь будет авторизован на комет сервере.
21+
22+
====== Отправка сообщений для авторизованных пользователей ======
23+
24+
При отправке сообщений авторизованным пользователям по их идентификатору ([[comet:cometql#таблица_users_messages|insert запрос в таблицу users_messages]]) сообщения доставляются пользователю на все устройства (До 16 устройств) на которых он прошёл авторизацию в данный момент. Это очень удобно в том случаи если человек зашёл на ваш сайт и авторизовался на нём более чем с одного устройства (к примеру телефон и компьютер или просто в двух разных браузерах сидит одновременно).
25+
26+
Если человек в данный момент ofline то сообщение помещается в очередь сообщений и будет доставлено когда человек появится online.
27+
28+
Основное назначение очереди сообщений это доставка сообщений после кратковременного перехода человека в ofline. Например в тех случаях когда человек обновляет страницу сайта на которой было открыто соединение он уходит в ofline примерно на 1 секунду.
29+
30+
31+
32+
====== Подписка на получение личных сообщений ======
33+
Для того чтобы получать личные сообщения. Надо подписаться на них. Подписка на сообщения с именем события "event1" от сервера доставленные в соответствии с данными авторизации (то есть по id пользователя) осуществляется следующим образом.
34+
<code JavaScript>CometServer().subscription("msg.event1", function(e){ console.log(e)})</code>
35+
36+
Канал msg относиться к [[comet:javascript_api:pipe-types|списку каналов с особыми свойствами]]
37+
38+
====== Определение статуса авторизации ======
39+
40+
Что бы определится авторизовались мы на комет сервере или нет есть несколько специальных функций
41+
42+
Функция isAuthorized вернёт текущее значение состояния авторизации. Бывает три значения в ответе.
43+
44+
* undefined - статус ещё не определён, на пример не было подключения или оно в процессе.
45+
* true - авторизованы
46+
* false - не авторизованны
47+
48+
<code JavaScript>
49+
cometApi.isAuthorized()
50+
</code>
51+
52+
Функция onAuthSuccess служит для подписки на оповещения о том моменте кода статус поменялся с любого на "авторизован"
53+
<code JavaScript>
54+
cometApi.onAuthSuccess(function()
55+
{
56+
alert("Авторизовались успешно")
57+
})
58+
</code>
59+
60+
Функция onAuthFalill служит для подписки на оповещения о том моменте кода статус поменялся с любого на "не авторизован"
61+
<code JavaScript>
62+
cometApi.onAuthFalill(function()
63+
{
64+
alert("Не авторизовались")
65+
})
66+
</code>
67+
68+
====== Онлайн демо отправки личных сообщений ======
69+
70+
[[https://github.com/CppComet/auth-example|Код примера]] [[https://cppcomet.github.io/auth-example/index.html|online demo on github]] [[https://codepen.io/Levhav/pen/XaWLra|Смотреть на codepen.io]]
71+
72+
Откройте пример в двух или более браузерах, Скопируйте ваш `USER_ID` из одного окна и вставьте его в другое окно. В поле с подписью ` Identificator of user who must will receive the message` введите текст сообщения и нажмите отправить. Вы увидите что сообщение придёт только в то окно у которого задан то же USER_ID который вы и указали при отправке.
73+
74+
<html>
75+
<iframe height='800' scrolling='no' title='CppComet auth chat example' src='//codepen.io/Levhav/embed/XaWLra/?height=265&theme-id=dark&default-tab=js,result&embed-version=2' frameborder='no' allowtransparency='true' allowfullscreen='true' style='width: 100%;'>See the Pen <a href='https://codepen.io/Levhav/pen/XaWLra/'>CppComet auth chat example</a> by Trapenok Victor (<a href='https://codepen.io/Levhav'>@Levhav</a>) on <a href='https://codepen.io'>CodePen</a>.
76+
</iframe>
77+
</html>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
<rst>RU::004-Администрирование</rst>
2+
3+
====== Установка ======
4+
5+
Рекомендуемые ОС ubuntu, debian, centos
6+
<code bash>
7+
apt-get update
8+
apt-get install cmake make cpp gcc libssl-dev g++ nginx libmysqlclient-dev mysql-server mysql-client flex mailutils uuid-dev
9+
</code>
10+
11+
====== Собираем из исходных кодов ======
12+
<code bash>
13+
git clone https://github.com/Levhav/comet-server
14+
cd comet-server
15+
cmake .
16+
make
17+
</code>
18+
19+
====== Настройки ======
20+
21+
CppComet использует базу данных mysql для хранения данных пользователей для авторизации на сервере. И хранения времени, когда пользователь был в сети. И для хранения временных данных, таких как не доставленные сообщения и другие данные.
22+
23+
* Создайте базу в mysql на основе файла [[https://github.com/Levhav/comet-server/blob/master/db.sql|db.sql]]
24+
* В файле [[https://github.com/CppComet/comet-server/blob/master/comet.ini|comet.ini]] укажите реквизиты для доступа к бд в секции [db]
25+
<code ini>
26+
[db]
27+
host = localhost
28+
user = root
29+
password = root
30+
name = comet_db
31+
port = 3305
32+
</code>
33+
Укажите пароль для доступа к api комет сервера
34+
<code ini>
35+
[main]
36+
; пароль для доступа к api комет сервера
37+
password = 0000000000000000000000000000000000000000000000000000000000000000
38+
</code>
39+
Остальные настройки из файла [[https://github.com/CppComet/comet-server/blob/master/comet.ini|comet.ini]] можно не менять.
40+
41+
====== Запуск ======
42+
Запуск в консольном режиме
43+
<code sh>
44+
./cpp_comet
45+
</code>
46+
Запуск в режиме демона
47+
<code sh>
48+
systemctl start comet.service
49+
</code>
50+
51+
===== Добавление в автозагрузку =====
52+
53+
54+
<code sh>cp ./comet.service /etc/systemd/system
55+
systemctl daemon-reload
56+
systemctl enable comet.service</code>
57+
====== Настройка nginx в качестве реверс прокси ======
58+
59+
Для того чтоб настроить работу комет сервера на одной машине с другим сервером. Или просто иметь возможность работы не только по http но и по https надо настроить реверс прокси.
60+
61+
Ниже приведён пример конфигурации nginx для проксирования трафика до комет сервера с /comet-server на комет сервер запущенный на порту 82 и всего остального трафика на веб сервер запущенном на порту 8080
62+
<file text default>
63+
server {
64+
listen 0.0.0.0:80;
65+
server_name comet-server.com;
66+
67+
location / {
68+
proxy_pass http://127.0.0.1:8080;
69+
proxy_set_header Host $host;
70+
proxy_set_header X-Real-IP $remote_addr;
71+
proxy_set_header X-Forwarded-For $remote_addr;
72+
proxy_connect_timeout 120;
73+
proxy_send_timeout 120;
74+
proxy_read_timeout 180;
75+
}
76+
77+
keepalive_disable none;
78+
lingering_close always;
79+
send_timeout 3600s;
80+
81+
location /comet-server {
82+
proxy_pass http://127.0.0.1:82;
83+
84+
proxy_set_header X-Real-IP $remote_addr;
85+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
86+
proxy_set_header Host $http_host;
87+
proxy_set_header X-NginX-Proxy true;
88+
89+
proxy_http_version 1.1;
90+
proxy_set_header Upgrade $http_upgrade;
91+
proxy_set_header Connection "upgrade";
92+
93+
proxy_redirect off;
94+
keepalive_timeout 900;
95+
proxy_read_timeout 900;
96+
}
97+
}
98+
99+
# HTTPS server
100+
101+
102+
server {
103+
listen 0.0.0.0:443;
104+
server_name comet-server.com;
105+
106+
ssl on;
107+
ssl_certificate /etc/letsencrypt/live/comet-server.com/fullchain.pem;
108+
ssl_certificate_key /etc/letsencrypt/live/comet-server.com/privkey.pem;
109+
110+
ssl_session_timeout 70m;
111+
112+
ssl_protocols SSLv3 TLSv1;
113+
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
114+
ssl_prefer_server_ciphers on;
115+
116+
keepalive_disable none;
117+
lingering_close always;
118+
send_timeout 3600s;
119+
120+
location / {
121+
proxy_pass http://127.0.0.1:8080;
122+
proxy_set_header Host $host;
123+
proxy_set_header X-Real-IP $remote_addr;
124+
proxy_set_header X-Forwarded-For $remote_addr;
125+
proxy_connect_timeout 120;
126+
proxy_send_timeout 120;
127+
proxy_read_timeout 180;
128+
129+
}
130+
131+
location /comet-server {
132+
proxy_pass http://127.0.0.1:82;
133+
134+
proxy_set_header X-Real-IP $remote_addr;
135+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
136+
proxy_set_header Host $http_host;
137+
proxy_set_header X-NginX-Proxy true;
138+
139+
proxy_http_version 1.1;
140+
proxy_set_header Upgrade $http_upgrade;
141+
proxy_set_header Connection "upgrade";
142+
143+
proxy_redirect off;
144+
keepalive_timeout 900;
145+
proxy_read_timeout 900;
146+
}
147+
}
148+
</file>
149+
150+
====== Возможные проблемы после установки ======
151+
152+
Обратите внимание на то какие значения параметра port указаны в секциях [ws] и [cometql] именно на этих портах комет сервер будет ожидать входящие подключения.
153+
154+
В шаблоне comet.ini поставляемом в репозитории параметр port для подключений из JavaScrip api выставлен в 8087
155+
Это значит что подключатся надо так:
156+
<code JavaScript>cometApi.start({user_id:1, user_key:"userHash", node:"example.ru:8087"})</code>
157+
158+
Параметр port для подключений из CometQL выставлен в 3300
159+
Это значит что подключатся надо так:
160+
<code PHP>$link = mysqli_connect("example.ru", "root", "", "CometQL_v1", 3300);</code>
161+
162+
163+
164+
165+
166+
167+
168+
169+
170+
171+

0 commit comments

Comments
 (0)