Skip to content

Commit a1dc4ab

Browse files
Merge pull request #22 from CppComet/alfa
Added .md docs
2 parents 60cc788 + 3d1ab3d commit a1dc4ab

Some content is hidden

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

55 files changed

+5822
-0
lines changed

docs/wiki-md/comet/authentication.md

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
2+
# Авторизация пользователей
3+
4+
Помимо каналов где каждый кто знает имя канала может подписаться на него, есть возможность авторизации пользователей на комет сервере и отправки личных сообщений пользователям по их идентификаторам. Авторизация пользователя происходит в 2 этапа. Первый этап это отправка идентификатора пользователя в вашей системе и случайного хеша в комет сервер.
5+
6+
7+
```
8+
9+
mysql> INSERT INTO users_auth (id, hash )VALUES (1, 'auth_hash1');
10+
11+
```
12+
13+
* Здесь строка auth_hash1 - это текстовый ключ авторизации. Вы его сами генерируете на своём сервере и отправляете сначала в комет по средствам insert запроса в таблицу users_auth, а затем передаёте в JavaScript для авторизации конкретного пользователя на комет сервере.
14+
* Числовой_Идентификатор_пользователя - Это id пользователя на вашем сайте, любое целое положительное число не более чем из 9 цифр.
15+
16+
17+
```
18+
19+
// На втором этапе эти сведения (идентификатор пользователя и хеш) надо передать в JavaScript Api
20+
$(document).ready(function()
21+
{
22+
CometServer().start({dev_id:15, user_key:"auth_hash1", user_id:"Числовой_Идентификатор_пользователя" })
23+
});
24+
25+
```
26+
27+
И теперь пользователь будет авторизован на комет сервере.
28+
29+
# Отправка сообщений для авторизованных пользователей
30+
31+
При отправке сообщений авторизованным пользователям по их идентификатору ([insert запрос в таблицу users_messages](/docs/wiki-md/comet/cometql.md)) сообщения доставляются пользователю на все устройства (До 16 устройств) на которых он прошёл авторизацию в данный момент. Это очень удобно в том случаи если человек зашёл на ваш сайт и авторизовался на нём более чем с одного устройства (к примеру телефон и компьютер или просто в двух разных браузерах сидит одновременно).
32+
33+
Если человек в данный момент ofline то сообщение помещается в очередь сообщений и будет доставлено когда человек появится online.
34+
35+
Основное назначение очереди сообщений это доставка сообщений после кратковременного перехода человека в ofline. Например в тех случаях когда человек обновляет страницу сайта на которой было открыто соединение он уходит в ofline примерно на 1 секунду.
36+
37+
38+
39+
# Подписка на получение личных сообщений
40+
Для того чтобы получать личные сообщения. Надо подписаться на них. Подписка на сообщения с именем события "event1" от сервера доставленные в соответствии с данными авторизации (то есть по id пользователя) осуществляется следующим образом.
41+
42+
```
43+
CometServer().subscription("msg.event1", function(e){ console.log(e)})
44+
```
45+
46+
47+
Канал msg относиться к [списку каналов с особыми свойствами](/docs/wiki-md/comet/javascript_api/pipe-types.md)
48+
49+
# Определение статуса авторизации
50+
51+
Что бы определится авторизовались мы на комет сервере или нет есть несколько специальных функций
52+
53+
Функция isAuthorized вернёт текущее значение состояния авторизации. Бывает три значения в ответе.
54+
55+
* undefined - статус ещё не определён, на пример не было подключения или оно в процессе.
56+
* true - авторизованы
57+
* false - не авторизованны
58+
59+
60+
```
61+
62+
cometApi.isAuthorized()
63+
64+
```
65+
66+
67+
Функция onAuthSuccess служит для подписки на оповещения о том моменте кода статус поменялся с любого на "авторизован"
68+
69+
```
70+
71+
cometApi.onAuthSuccess(function()
72+
{
73+
alert("Авторизовались успешно")
74+
})
75+
76+
```
77+
78+
79+
Функция onAuthFalill служит для подписки на оповещения о том моменте кода статус поменялся с любого на "не авторизован"
80+
81+
```
82+
83+
cometApi.onAuthFalill(function()
84+
{
85+
alert("Не авторизовались")
86+
})
87+
88+
```
89+
90+
91+
# Онлайн демо отправки личных сообщений
92+
93+
[Код примера](https://github.com/CppComet/auth-example) [online demo on github](https://cppcomet.github.io/auth-example/index.html) [Смотреть на codepen.io](https://codepen.io/Levhav/pen/XaWLra)
94+
95+
Откройте пример в двух или более браузерах, Скопируйте ваш `USER_ID` из одного окна и вставьте его в другое окно. В поле с подписью ` Identificator of user who must will receive the message` введите текст сообщения и нажмите отправить. Вы увидите что сообщение придёт только в то окно у которого задан то же USER_ID который вы и указали при отправке.
96+
97+
<html>
98+
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>.
99+
100+
</html>
+215
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
2+
# Установка
3+
4+
Рекомендуемые ОС ubuntu, debian, centos
5+
6+
```
7+
8+
apt-get update
9+
apt-get install cmake make cpp gcc libssl-dev g++ nginx libmysqlclient-dev mysql-server mysql-client flex mailutils uuid-dev
10+
11+
```
12+
13+
14+
# Собираем из исходных кодов
15+
16+
```
17+
18+
git clone https://github.com/Levhav/comet-server
19+
cd comet-server
20+
cmake .
21+
make
22+
23+
```
24+
25+
26+
# Настройки
27+
28+
CppComet использует базу данных mysql для хранения данных пользователей для авторизации на сервере. И хранения времени, когда пользователь был в сети. И для хранения временных данных, таких как не доставленные сообщения и другие данные.
29+
30+
* Создайте базу в mysql на основе файла [db.sql](https://github.com/Levhav/comet-server/blob/master/db.sql)
31+
* В файле [comet.ini](https://github.com/CppComet/comet-server/blob/master/comet.ini) укажите реквизиты для доступа к бд в секции [db]
32+
33+
```
34+
35+
[db]
36+
host = localhost
37+
user = root
38+
password = root
39+
name = comet_db
40+
port = 3305
41+
42+
```
43+
44+
Укажите пароль для доступа к api комет сервера
45+
46+
```
47+
48+
[main]
49+
; пароль для доступа к api комет сервера
50+
password = 0000000000000000000000000000000000000000000000000000000000000000
51+
52+
```
53+
54+
Остальные настройки из файла [comet.ini](https://github.com/CppComet/comet-server/blob/master/comet.ini) можно не менять.
55+
56+
57+
___
58+
Весь перечень настроек в статье [Настройка файла comet.ini](/docs/wiki-md/comet/ini-file.md)
59+
___
60+
61+
62+
# Запуск
63+
Запуск в консольном режиме
64+
65+
```
66+
67+
./cpp_comet
68+
69+
```
70+
71+
Запуск в режиме демона
72+
73+
```
74+
75+
systemctl start comet.service
76+
77+
```
78+
79+
80+
# Добавление в автозагрузку
81+
82+
83+
84+
```
85+
cp ./comet.service /etc/systemd/system
86+
systemctl daemon-reload
87+
systemctl enable comet.service
88+
```
89+
90+
# Настройка nginx в качестве реверс прокси
91+
92+
Для того чтоб настроить работу комет сервера на одной машине с другим сервером. Или просто иметь возможность работы не только по http но и по https надо настроить реверс прокси.
93+
94+
Ниже приведён пример конфигурации nginx для проксирования трафика до комет сервера с /comet-server на комет сервер запущенный на порту 82 и всего остального трафика на веб сервер запущенном на порту 8080
95+
96+
```
97+
98+
server {
99+
listen 0.0.0.0:80;
100+
server_name comet-server.com;
101+
102+
location / {
103+
proxy_pass http://127.0.0.1:8080;
104+
proxy_set_header Host $host;
105+
proxy_set_header X-Real-IP $remote_addr;
106+
proxy_set_header X-Forwarded-For $remote_addr;
107+
proxy_connect_timeout 120;
108+
proxy_send_timeout 120;
109+
proxy_read_timeout 180;
110+
}
111+
112+
keepalive_disable none;
113+
lingering_close always;
114+
send_timeout 3600s;
115+
116+
location /comet-server {
117+
proxy_pass http://127.0.0.1:82;
118+
119+
proxy_set_header X-Real-IP $remote_addr;
120+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
121+
proxy_set_header Host $http_host;
122+
proxy_set_header X-NginX-Proxy true;
123+
124+
proxy_http_version 1.1;
125+
proxy_set_header Upgrade $http_upgrade;
126+
proxy_set_header Connection "upgrade";
127+
128+
proxy_redirect off;
129+
keepalive_timeout 900;
130+
proxy_read_timeout 900;
131+
}
132+
}
133+
134+
# HTTPS server
135+
136+
137+
server {
138+
listen 0.0.0.0:443;
139+
server_name comet-server.com;
140+
141+
ssl on;
142+
ssl_certificate /etc/letsencrypt/live/comet-server.com/fullchain.pem;
143+
ssl_certificate_key /etc/letsencrypt/live/comet-server.com/privkey.pem;
144+
145+
ssl_session_timeout 70m;
146+
147+
ssl_protocols SSLv3 TLSv1;
148+
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
149+
ssl_prefer_server_ciphers on;
150+
151+
keepalive_disable none;
152+
lingering_close always;
153+
send_timeout 3600s;
154+
155+
location / {
156+
proxy_pass http://127.0.0.1:8080;
157+
proxy_set_header Host $host;
158+
proxy_set_header X-Real-IP $remote_addr;
159+
proxy_set_header X-Forwarded-For $remote_addr;
160+
proxy_connect_timeout 120;
161+
proxy_send_timeout 120;
162+
proxy_read_timeout 180;
163+
164+
}
165+
166+
location /comet-server {
167+
proxy_pass http://127.0.0.1:82;
168+
169+
proxy_set_header X-Real-IP $remote_addr;
170+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
171+
proxy_set_header Host $http_host;
172+
proxy_set_header X-NginX-Proxy true;
173+
174+
proxy_http_version 1.1;
175+
proxy_set_header Upgrade $http_upgrade;
176+
proxy_set_header Connection "upgrade";
177+
178+
proxy_redirect off;
179+
keepalive_timeout 900;
180+
proxy_read_timeout 900;
181+
}
182+
}
183+
184+
```
185+
186+
187+
# Возможные проблемы после установки
188+
189+
Обратите внимание на то какие значения параметра port указаны в секциях [ws] и [cometql] именно на этих портах комет сервер будет ожидать входящие подключения.
190+
191+
В шаблоне comet.ini поставляемом в репозитории параметр port для подключений из JavaScrip api выставлен в 8087
192+
Это значит что подключатся надо так:
193+
194+
```
195+
cometApi.start({user_id:1, user_key:"userHash", node:"example.ru:8087"})
196+
```
197+
198+
199+
Параметр port для подключений из CometQL выставлен в 3300
200+
Это значит что подключатся надо так:
201+
202+
```
203+
$link = mysqli_connect("example.ru", "root", "", "CometQL_v1", 3300);
204+
```
205+
206+
207+
Так же обратите внимание на то что надо указывать имя базы данных CometQL_v1, оно символизирует версию апи и вероятно потом выйдет версия CometQL_v2 и можно будет при подключении выбирать версию для работы.
208+
209+
210+
211+
212+
213+
214+
215+

0 commit comments

Comments
 (0)