Плагин <-> SOCKET <-> Любое приложение

Здесь обсуждаются технические аспекты создания дополнений.
ZigZagkms
Сообщения: 109
Зарегистрирован: 08:23, 11.12.2008
Откуда: Комсомольск-на-Амуре
Контактная информация:

Плагин <-> SOCKET <-> Любое приложение

Сообщение ZigZagkms »

Выкладываю очень простой, но очень полезный для некоторых разработчиков серверный плагин. Как он и работает и для чего он?

На сервере:
1) Запускаем плагин, плагин начинает слушать порт 9756 и принимать подключения на этот порт.

Теперь для чего он:
1) Дает возможность писать плагины на чем угодно, на ВСЕХ абсолютно языках которые позволяют работать с сокетами (php, python, ruby, C# и все другие).
2) При разработки не надо изучать API плагина, API он свой не использует, плагин - транслятор, тупо перекидывает команды серверу, ждет выполнения\результата и отправляет ответ на сокет запросивший команду.
3) Не надо думать о синхронизации потоков, плагин потокобезопасен и позволяет работать одновременно с 150 подключениями (ограничений нету)
4) Ну а самый большой плюс в том, что плагин находится в другом процессе, независимым от сервера (никак не может повлиять на работу сервера). Плагин можно запустить даже на другом компьютере и подключить к серверу удаленно...

Теперь о том как его использовать:
1) Подключаемся к IP сервера на порт 9756

Код: Выделить всё

//
// Получаемые команды от сервера
#define SID_ERROR_CODE				1				// число(номер ошибки)
#define SID_COMM_PROC_OK				2				// число(UID)
#define SID_COMM_GET_OK				3				// число(UID) + блок данных (входящий)
#define SID_COMM_GET_SIZE_OK			4				// число(UID) + число(размер буфера)
#define SID_COMM_PROC				5				// число(ID) + блок данных


//
// Отправляемые команды на сервер
#define BID_COMM_PROC			1				// число(ID) + число(UID) + блок данных
											// RESULT: SID_COMM_PROC_OK
#define BID_COMM_GET			2				// число(ID) + число(UID) + блок данных (исходящий)
											// RESULT: SID_COMM_GET_SIZE_OK
#define BID_COMM_GET_SIZE			3				// число(ID) + число(UID) + блок данных (исходящий)
											// RESULT: SID_COMM_GET_OK
//done
Где
число(ID) - ID команды (например Подключить виртуального пользователя это ID 1001)
число(UID) - любое уникальное число, для идентификации команд, можно использовать обычный счетчик, слуэит для того чтобы в ответе от сервера идентифицировать запрашиваемую команду, тем самым отследив результат ее выполнения
блоки данных - из документации по API коммфорта

Также прикрепляю бота написанного на PHP, который успешно подключается к серверу, получает команды и инициирует новые.

Теперь внимание (!)
Бот не использует никаких защит от подключения посторонних, не нужных клиентов, потому что это не сложно сделать файрволлом .. Разрешаем подключения на порт 9756 только для доверенных IP. Обязательно ограничьте!

Еще сделал мини программку которая может запускать все плагины серверные под себя и прозрачно пропускать их через сокет, тем самым обезопасив сервер от всех проблем (утечки, загрузки) + удобно перезапускать и обновлять, но там проблема с мафией, пока не разобрался не выкладываю.
Вложения
CommNet.rar
(365.57 КБ) 833 скачивания
TestPHPBot.rar
серверный плагин на PHP
(6.79 МБ) 817 скачиваний
Последний раз редактировалось ZigZagkms 02:40, 07.12.2011, всего редактировалось 1 раз.
Забросил, всем спасибо, исходники раздаю кому надо https://github.com/ZigZagkms
Cilvay
Сообщения: 816
Зарегистрирован: 14:55, 16.06.2008

Re: Плагин <-> SOCKET <-> Любое приложение

Сообщение Cilvay »

запуск программы не возможен тк отсутствует rtl140.bpl
при запуске плагина
Аватара пользователя
dv
Сообщения: 1844
Зарегистрирован: 10:28, 11.05.2007
Откуда: Краснодар

Re: Плагин <-> SOCKET <-> Любое приложение

Сообщение dv »

[Coобщение удaленo]
Последний раз редактировалось dv 16:40, 25.06.2012, всего редактировалось 1 раз.
Дополнения для CommFort
Адрес чата: chat.telered.ru




.
ZigZagkms
Сообщения: 109
Зарегистрирован: 08:23, 11.12.2008
Откуда: Комсомольск-на-Амуре
Контактная информация:

Re: Плагин <-> SOCKET <-> Любое приложение

Сообщение ZigZagkms »

dv писал(а):2 ZigZagkms
чтобы программа работала на компьютерах, на которых не установлен билдер, нужно провести следующие настройки в опциях проекта:
- закладка packages: убрать галочку Build with runtimes packages
- закладка linker: убрать галочку Use dinamyc RTL
да знаю, забыл сори =)) сейчас обновлю

p.s. первый пост обновил, еще одно из применений плагина - можно на сайте выводить любую информацию с комфорта.... или сделать авторизацию по учеткам в комфорте, вообщем что угодно можно сделать
Забросил, всем спасибо, исходники раздаю кому надо https://github.com/ZigZagkms
ZigZagkms
Сообщения: 109
Зарегистрирован: 08:23, 11.12.2008
Откуда: Комсомольск-на-Амуре
Контактная информация:

Re: Плагин <-> SOCKET <-> Любое приложение

Сообщение ZigZagkms »

просьба отписаться, пробовал ли кто использовать этот плагин, имеет ли смысл до усовершенствовать его.
напишите кто пробовал с ним работать
Забросил, всем спасибо, исходники раздаю кому надо https://github.com/ZigZagkms
akaTemporary
Сообщения: 41
Зарегистрирован: 18:43, 01.03.2010

Re: Плагин <-> SOCKET <-> Любое приложение

Сообщение akaTemporary »

Идея ваша отлична. Не тестил. Собираюсь, но так как у меня админские права, то скорее всего, буду писать что то похожее. Плагиатом не занимаюсь, а ваше доблесное имя (если все получится, однозначно укажу).
Аватара пользователя
ForestM
Сообщения: 80
Зарегистрирован: 16:10, 01.12.2010

Re: Плагин <-> SOCKET <-> Любое приложение

Сообщение ForestM »

а есть примеры получения данных?

например как при запросе узнать количество онлайн?

например при открытии сайт.ру/online.php и как что бы echo вывело количество пользователей в чате?

для примера напишите пожалуйста
bigbag
Сообщения: 71
Зарегистрирован: 21:30, 28.02.2009

Re: Плагин <-> SOCKET <-> Любое приложение

Сообщение bigbag »

> как при запросе узнать количество онлайн?

После создания виртуального пользователя посылаете через сокет запрос (ID: 1041) и читаете ответ:

Код: Выделить всё

iam -> server
0c 00 00 00 02 00 00 00 11 04 00 00 09 00 00 00
длина      | тип (BID) | ID        | UID

iam <- server
4c 00 00 00 03 00 00 00 09 00 00 00 02 00 00 00 03 00 00 00 4e 00 6f 00 78 00 ...
длина      | тип (SID) | UID       | блок данных
Не хватает ограничения доступа, конечно. Фаервол не подходит.
Вообще, идея уберкрутая, и можно будет делиться скриптами.
ZigZagkms
Сообщения: 109
Зарегистрирован: 08:23, 11.12.2008
Откуда: Комсомольск-на-Амуре
Контактная информация:

Re: Плагин <-> SOCKET <-> Любое приложение

Сообщение ZigZagkms »

раз уж я забросил все это дело с чатиком, поделюсь исходниками, может кому пригодятся: https://github.com/ZigZagkms/commfort_gate
kingston по моим стопам идет, молоток
Забросил, всем спасибо, исходники раздаю кому надо https://github.com/ZigZagkms
Ответить