Skip to content

Commit

Permalink
Merge pull request #18 from CppComet/alfa
Browse files Browse the repository at this point in the history
3.22
  • Loading branch information
VictorTrapenok authored Aug 22, 2017
2 parents 2324304 + 1336cc6 commit af5db2d
Show file tree
Hide file tree
Showing 83 changed files with 4,584 additions and 87 deletions.
30 changes: 22 additions & 8 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,44 @@
## Next Release

BREAKING CHANGES:
FEATURES:
IMPROVEMENTS:
BREAKING CHANGES:
FEATURES:
IMPROVEMENTS:
BUG FIXES:

## v3.22

BUG FIXES:

* last online time did not save

IMPROVEMENTS:

* Added functions for aggregating statistics of using server
* Added settings to .ini file for controll content-type header
* Added dosc in dokuwiki format
* Was translated comments in comet.ini
* Added the white list of hosts to .ini file

## v3.21

IMPROVEMENTS:

* Added caching in memory for sending static files
* Added cache-control headers for get requests

## v3.2

BUG FIXES:
* Js Api version 3.28 (Fix bug in auth callbacks)
* Fix bug in auth callbacks
* complete api function getTrackPipeUsers

## v3.1
FEATURES:

FEATURES:

* Added function to getting users in track_pipes from js api
* Added deleting api query for pipes history #5
* Added deleting api query for pipes history #5
* Added CODE_OF_CONDUCT.md
* Added CONTRIBUTING.md
* Added CHANGELOG.md
Expand Down
46 changes: 19 additions & 27 deletions comet.ini
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
[main]
isTest = false; включение тестов

node_name = n1
useQueryLoger = false

; пароль для доступа к api комет сервера
;password = 0000000000000000000000000000000000000000000000000000000000000000
[main]

; Password for accessing comet server api
password = 0000000000000000000000000000000000000000000000000000000000000000

[db]
host = localhost
Expand All @@ -15,36 +11,32 @@ name = comet_db
port = 3305

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

[cometql]
ip = 0.0.0.0
backlog = 1000
epoll_size = 10000
thread_num = 4
benchmark = 0
ip = 0.0.0.0
thread_num = 3 ; number of threads for receive message from cometql
statistics = 10
port = 3300
uptimeTestInterval = 600
maxUptime = 0

[benchmark]
to_log = false ; Вывод замеров о нагрузке в лог


[log]
level = 500
level = 200; Logging level (600 output all, 200 errors only)

; Logging levels for individual subsystems
; Change only if debugging is necessary
Any = 500
TagLoger = 500
appConf = 500
pipeCommands = 500
benchmark = 500
statistics = 500
removeOldConnections = 500
MySqlServer = 500
UserIndex = 500
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/dokuwiki/data/media/comet/htop.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/dokuwiki/data/media/comet/out.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/dokuwiki/data/media/en/comet/chat.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/dokuwiki/data/media/user/picture.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/dokuwiki/data/media/wiki/dokuwiki-128.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
77 changes: 77 additions & 0 deletions docs/dokuwiki/data/pages/comet/authentication.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<rst>RU::002-API::004-Авторизация пользователей на комет сервере</rst>

====== Авторизация пользователей ======

Помимо каналов где каждый кто знает имя канала может подписаться на него, есть возможность авторизации пользователей на комет сервере и отправки личных сообщений пользователям по их идентификаторам. Авторизация пользователя происходит в 2 этапа. Первый этап это отправка идентификатора пользователя в вашей системе и случайного хеша в комет сервер.

<code sql>
mysql> INSERT INTO users_auth (id, hash )VALUES (1, 'auth_hash1');
</code>
* Здесь строка auth_hash1 - это текстовый ключ авторизации. Вы его сами генерируете на своём сервере и отправляете сначала в комет по средствам insert запроса в таблицу users_auth, а затем передаёте в JavaScript для авторизации конкретного пользователя на комет сервере.
* Числовой_Идентификатор_пользователя - Это id пользователя на вашем сайте, любое целое положительное число не более чем из 9 цифр.

<code JavaScript>
// На втором этапе эти сведения (идентификатор пользователя и хеш) надо передать в JavaScript Api
$(document).ready(function()
{
CometServer().start({dev_id:15, user_key:"auth_hash1", user_id:"Числовой_Идентификатор_пользователя" })
});
</code>
И теперь пользователь будет авторизован на комет сервере.

====== Отправка сообщений для авторизованных пользователей ======

При отправке сообщений авторизованным пользователям по их идентификатору ([[comet:cometql#таблица_users_messages|insert запрос в таблицу users_messages]]) сообщения доставляются пользователю на все устройства (До 16 устройств) на которых он прошёл авторизацию в данный момент. Это очень удобно в том случаи если человек зашёл на ваш сайт и авторизовался на нём более чем с одного устройства (к примеру телефон и компьютер или просто в двух разных браузерах сидит одновременно).

Если человек в данный момент ofline то сообщение помещается в очередь сообщений и будет доставлено когда человек появится online.

Основное назначение очереди сообщений это доставка сообщений после кратковременного перехода человека в ofline. Например в тех случаях когда человек обновляет страницу сайта на которой было открыто соединение он уходит в ofline примерно на 1 секунду.



====== Подписка на получение личных сообщений ======
Для того чтобы получать личные сообщения. Надо подписаться на них. Подписка на сообщения с именем события "event1" от сервера доставленные в соответствии с данными авторизации (то есть по id пользователя) осуществляется следующим образом.
<code JavaScript>CometServer().subscription("msg.event1", function(e){ console.log(e)})</code>

Канал msg относиться к [[comet:javascript_api:pipe-types|списку каналов с особыми свойствами]]

====== Определение статуса авторизации ======

Что бы определится авторизовались мы на комет сервере или нет есть несколько специальных функций

Функция isAuthorized вернёт текущее значение состояния авторизации. Бывает три значения в ответе.

* undefined - статус ещё не определён, на пример не было подключения или оно в процессе.
* true - авторизованы
* false - не авторизованны

<code JavaScript>
cometApi.isAuthorized()
</code>

Функция onAuthSuccess служит для подписки на оповещения о том моменте кода статус поменялся с любого на "авторизован"
<code JavaScript>
cometApi.onAuthSuccess(function()
{
alert("Авторизовались успешно")
})
</code>

Функция onAuthFalill служит для подписки на оповещения о том моменте кода статус поменялся с любого на "не авторизован"
<code JavaScript>
cometApi.onAuthFalill(function()
{
alert("Не авторизовались")
})
</code>

====== Онлайн демо отправки личных сообщений ======

[[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]]

Откройте пример в двух или более браузерах, Скопируйте ваш `USER_ID` из одного окна и вставьте его в другое окно. В поле с подписью ` Identificator of user who must will receive the message` введите текст сообщения и нажмите отправить. Вы увидите что сообщение придёт только в то окно у которого задан то же USER_ID который вы и указали при отправке.

<html>
<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>.
</iframe>
</html>
171 changes: 171 additions & 0 deletions docs/dokuwiki/data/pages/comet/building-from-source.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
<rst>RU::004-Администрирование</rst>

====== Установка ======

Рекомендуемые ОС ubuntu, debian, centos
<code bash>
apt-get update
apt-get install cmake make cpp gcc libssl-dev g++ nginx libmysqlclient-dev mysql-server mysql-client flex mailutils uuid-dev
</code>

====== Собираем из исходных кодов ======
<code bash>
git clone https://github.com/Levhav/comet-server
cd comet-server
cmake .
make
</code>

====== Настройки ======

CppComet использует базу данных mysql для хранения данных пользователей для авторизации на сервере. И хранения времени, когда пользователь был в сети. И для хранения временных данных, таких как не доставленные сообщения и другие данные.

* Создайте базу в mysql на основе файла [[https://github.com/Levhav/comet-server/blob/master/db.sql|db.sql]]
* В файле [[https://github.com/CppComet/comet-server/blob/master/comet.ini|comet.ini]] укажите реквизиты для доступа к бд в секции [db]
<code ini>
[db]
host = localhost
user = root
password = root
name = comet_db
port = 3305
</code>
Укажите пароль для доступа к api комет сервера
<code ini>
[main]
; пароль для доступа к api комет сервера
password = 0000000000000000000000000000000000000000000000000000000000000000
</code>
Остальные настройки из файла [[https://github.com/CppComet/comet-server/blob/master/comet.ini|comet.ini]] можно не менять.

====== Запуск ======
Запуск в консольном режиме
<code sh>
./cpp_comet
</code>
Запуск в режиме демона
<code sh>
systemctl start comet.service
</code>

===== Добавление в автозагрузку =====


<code sh>cp ./comet.service /etc/systemd/system
systemctl daemon-reload
systemctl enable comet.service</code>
====== Настройка nginx в качестве реверс прокси ======

Для того чтоб настроить работу комет сервера на одной машине с другим сервером. Или просто иметь возможность работы не только по http но и по https надо настроить реверс прокси.

Ниже приведён пример конфигурации nginx для проксирования трафика до комет сервера с /comet-server на комет сервер запущенный на порту 82 и всего остального трафика на веб сервер запущенном на порту 8080
<file text default>
server {
listen 0.0.0.0:80;
server_name comet-server.com;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}

keepalive_disable none;
lingering_close always;
send_timeout 3600s;

location /comet-server {
proxy_pass http://127.0.0.1:82;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

proxy_redirect off;
keepalive_timeout 900;
proxy_read_timeout 900;
}
}

# HTTPS server


server {
listen 0.0.0.0:443;
server_name comet-server.com;

ssl on;
ssl_certificate /etc/letsencrypt/live/comet-server.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/comet-server.com/privkey.pem;

ssl_session_timeout 70m;

ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;

keepalive_disable none;
lingering_close always;
send_timeout 3600s;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;

}

location /comet-server {
proxy_pass http://127.0.0.1:82;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

proxy_redirect off;
keepalive_timeout 900;
proxy_read_timeout 900;
}
}
</file>

====== Возможные проблемы после установки ======

Обратите внимание на то какие значения параметра port указаны в секциях [ws] и [cometql] именно на этих портах комет сервер будет ожидать входящие подключения.

В шаблоне comet.ini поставляемом в репозитории параметр port для подключений из JavaScrip api выставлен в 8087
Это значит что подключатся надо так:
<code JavaScript>cometApi.start({user_id:1, user_key:"userHash", node:"example.ru:8087"})</code>

Параметр port для подключений из CometQL выставлен в 3300
Это значит что подключатся надо так:
<code PHP>$link = mysqli_connect("example.ru", "root", "", "CometQL_v1", 3300);</code>











Loading

0 comments on commit af5db2d

Please sign in to comment.