Написание IRC-сервисов для UnrealIRCD - PullRequest
1 голос
/ 25 ноября 2011

Ну, я искал материал для этого и не смог ничего найти.Я знаком с протоколом IRC и хочу написать IRC Services для моего сервера (работает на UnrealIRCD )

Предпочитаю PHP, поскольку я наиболее опытный там.Может кто-нибудь указать мне на хорошие уроки или даже объяснить, как начать?(Мне нужны только базовые протокол / синтаксис и настройки сервера, я сам буду выполнять реальные функции и возможности (надеюсь: P)).

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 03 декабря 2011

Чтение не скомпилированного исходного кода C сервисов Anope заставило меня указать правильное направление, хотя это немного проб и ошибок относительно того, где искать внутри него. Я не могу вспомнить, так как это было довольно давно, когда я пробовал свои собственные PHP-сервисы, но если каждый клиент, к которому подключаются сервисы, требует ответа PING / PONG, чтобы поддерживать соединение, то не упадет ли PHP? Потоки не так хороши, Linux, насколько я помню.

1 голос
/ 01 декабря 2011

Мой друг, я сделал это уже для InspIRCd.Это никогда не было закончено, но основы работали.Мы просто подключились к IRC-серверу через Socket-Connection (fsockopen в первой версии, socket_create во второй).

Для связи мы реализовали интерфейс к InspIRCd, содержащий конкретные строки, как указано в протоколе.,Эти методы могут быть вызваны ядром.

0 голосов
/ 14 января 2014

РЕДАКТИРОВАТЬ: Господи, я не понимал, сколько лет этот вопрос. При этом, кто-то может использовать это так ... ответ ниже.

Я сделал это на PHP, поэтому могу сказать, что это возможно (исходный код не выпущен).

Как говорится, я добавлю вам базовое ядро:

$socket = socket_create(AF_INET, SOCK_STREAM, 6);
// Prevent fast reconnects if server down but try to connect every ten seconds.
while ( !socket_connect($socket,ADDRESS,PORT) ) {

    sleep(10);
}
// set non blocking to avoid 'waiting' for data
socket_set_nonblock($socket);
// INTENTIONAL INFINITE LOOP
while(1) { 
    $read = array($socket);
    // check if there's anything to read.
    $num_changed_sockets = @socket_select($read, null, null, 0, 1);
    if ( $num_changed_sockets > '0' ) {
        // process the socket data here
        processSocket(socket_read($socket,10000,PHP_NORMAL_READ));
    }
}

Надеюсь, это поможет вам начать!

...