为UnrealIRCD编写IRC服务

时间:2011-11-25 12:24:36

标签: php irc

嗯,我一直在寻找这个的材料,但没找到任何东西。我熟悉IRC协议,我想为我的服务器编写 IRC服务(在 UnrealIRCD 上运行)

我更喜欢PHP,因为我最熟练。任何人都可以指点我一些好的教程,甚至在这里解释如何开始? (我只需要基本的协议/语法和服务器设置,我将自己完成实际的功能和能力(希望:P))。

提前致谢。

3 个答案:

答案 0 :(得分:1)

我的一个朋友我已经为InspIRCd做了这个。它从未完成,但基础工作正在进行中。我们只是通过Socket-Connection连接到IRC服务器(第一个版本中的fsockopen,第二个版本中的socket_create)。

对于通信,我们实现了一个InspIRCd接口,其中包含协议中所述的特定行。然后核心可以调用这些方法。

答案 1 :(得分:1)

阅读Anope服务的未编译的C源代码让我指出了正确的方向,尽管它在哪里查看它是一个试验和错误。我不记得,因为很久以前当我尝试自己的PHP服务时,但如果服务连接的每个客户端都需要PING / PONG回复以保持连接活动,那么PHP就不会失败了下?线程并不是那么好,Linux只是我记忆中的。

答案 2 :(得分:0)

编辑:好主,我没有意识到这个问题有多久了。话虽这么说,有人可能会这样使用......回答如下。

我已经用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));
    }
}

希望这有助于您开始使用!