精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>已关闭版区>>● MUD>>web mud的实现

主题:web mud的实现
发信人: veryxy(乐天)
整理人: littlewing(2001-01-25 08:30:05), 站内信件
  本人近来闲聊无事,想起前某愚友初学MUD之时感叹zMUD不易上手(此人不知IP,PORT为何物):“为什么不能用那个大E玩呢?”突发奇想,何不改写一下现今的MUD,使其可以用浏览器连接呢。说干就干,不消三日,花费业余时间终得实现。听说网上曾有人实现过此功能,因此想跟大家学习交流一下,共同进步。 
  众所周知,IE可支持多种网络协议,在这里我们采用的当然是HTTP。要用HTTP玩MUD有两个技术难题。首先是服务器推技术,也就是比较流行的server push,因为MUD里的信息随时都要发送到客户端浏览器上,总不能采用传统聊天室的客户端refresh吧?再就是用IE作为输入端必须将玩家输入的字符串送到服务器端正确进行处理。第一个难题幸亏现在介绍server push的技术资料比较多,所以没费什么力气。第二个难题可以采用IE的表单提交,在服务器端对表单域值进行检索就行了。在客户端我们需要一个带有三个frame的框架页面,将其中一个src直接设为mud的telnet连接地址,注意格式,例:“http://202.23.45.67:6666/xxxxx”。另一个frame内容为表单,包含一个text文本输入框,method为post,action设为以上格式,target为剩下frame的name,这样可以使得表单在提交之后不会消失掉。最后一个frame可设为一个不包含任何内容的空页面,它的作用只是用来显示表单提交后显示的结果,因此可以将它在框架页面里的大小设为零,即将它隐含起来。在服务器端本想通过调用LPC里的socket方法来自行建立http连接,后来觉得太麻烦而且移植性差,就采用了直接改写MUD里的telnet连接方法来实现,总共只需修改/adm/daemons/logind.c和/adm/simul_efun/message.c两个文件。在logind.c中有logon()函数,是处理客户端与服务器连接的,写一个input_to()语句,使得浏览器发过来的http检索字符串以参数形式传递给input_to里的函数,对其处理后直接用write返回相应字符串,并在此物件上用set_temp加一个标识区别于telnet连接用户。使用destruct(ob)可断开与浏览器的连接。message.c主要是用来回显信息的,对于浏览器连接用户必须对回显字符串进行相应处理,例如将颜色控制字符串转换为“font color=#xxxxxx”语句,以及加入自动卷屏的脚本,这样才能显示出正确的效果。

[关闭][返回]