Страница 1 из 1

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

Добавлено: 07:57, 06.12.2011
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. Обязательно ограничьте!

Еще сделал мини программку которая может запускать все плагины серверные под себя и прозрачно пропускать их через сокет, тем самым обезопасив сервер от всех проблем (утечки, загрузки) + удобно перезапускать и обновлять, но там проблема с мафией, пока не разобрался не выкладываю.

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

Добавлено: 21:05, 06.12.2011
Cilvay
запуск программы не возможен тк отсутствует rtl140.bpl
при запуске плагина

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

Добавлено: 02:07, 07.12.2011
dv
[Coобщение удaленo]

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

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

p.s. первый пост обновил, еще одно из применений плагина - можно на сайте выводить любую информацию с комфорта.... или сделать авторизацию по учеткам в комфорте, вообщем что угодно можно сделать

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

Добавлено: 10:06, 16.01.2012
ZigZagkms
просьба отписаться, пробовал ли кто использовать этот плагин, имеет ли смысл до усовершенствовать его.
напишите кто пробовал с ним работать

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

Добавлено: 18:39, 24.02.2012
akaTemporary
Идея ваша отлична. Не тестил. Собираюсь, но так как у меня админские права, то скорее всего, буду писать что то похожее. Плагиатом не занимаюсь, а ваше доблесное имя (если все получится, однозначно укажу).

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

Добавлено: 18:37, 18.01.2013
ForestM
а есть примеры получения данных?

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

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

для примера напишите пожалуйста

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

Добавлено: 13:46, 27.01.2013
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       | блок данных
Не хватает ограничения доступа, конечно. Фаервол не подходит.
Вообще, идея уберкрутая, и можно будет делиться скриптами.

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

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