提问人:Madara's Ghost 提问时间:11/25/2011 最后编辑:skaffmanMadara's Ghost 更新时间:3/27/2014 访问量:907
为UnrealIRCD编写IRC服务
Writing IRC Services for UnrealIRCD
问:
好吧,我一直在寻找这个材料,但什么也没找到。我熟悉IRC协议,我想为我的服务器编写IRC服务(运行在UnrealIRCD上)
我更喜欢 PHP,因为我最精通那里。任何人都可以给我指出一些好的教程,甚至在这里解释如何开始吗?(我只需要基本的协议/语法和服务器设置,我会自己做实际的功能和能力(希望:P))。
提前致谢。
答:
1赞
TimWolla
12/1/2011
#1
我的一个朋友已经为 InspIRCd 做了这个。它从未完成,但基础知识正在发挥作用。我们只需通过 Socket-Connection 连接到 IRC 服务器(第一个版本为 fsockopen,第二个版本为 socket_create)。
为了进行通信,我们实现了一个与InspIRCd的接口,其中包含协议中所述的特定行。然后,核心可以调用这些方法。
评论
0赞
Madara's Ghost
12/1/2011
我的朋友,你可能是我有史以来“最年轻”的成员。等我有时间再去看看。多谢!!
0赞
Madara's Ghost
12/2/2011
简直太棒了!如果我有疑问,我该如何联系你们?
1赞
Blake
12/3/2011
#2
阅读 Anope 服务的未编译 C 源代码让我找到了正确的方向,尽管在何处查看它有点反复试验。我不记得了,因为很久以前我尝试了自己的 PHP 服务,但是如果服务连接的每个客户端都需要 PING/PONG 回复来保持连接,那么 PHP 不会有点崩溃吗?线程不是那么好,据我所知,Linux 只是。
评论
0赞
Madara's Ghost
12/3/2011
我也会试一试。不过,我对 C 有点生疏:P谢谢!
0赞
Jeremy
1/14/2014
#3
编辑:天哪,我没有意识到这个问题有多古老。话虽如此,有人可能会使用它......在下面回答。
我已经在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));
}
}
希望这对您有所帮助!
评论