不是极度困难,却可以考验你的水平,高手进来讨论吧!
Kandy 2002-09-02 04:55:36 我想编写一个聊天的服务器程序。
我的思路是这样的。
请注意:没有具体的CLINET端。
模式是B/S模式,也就是我们通用的聊天室。
假定我请求http://61.166.154.14:8080/,这是没有带任何querystring的,服务的守护线程收到后,就发回一个普通的html给你,这个html是带了两个frame的,一个用于显示聊天内容,一个用于发送消息。
假如我是从浏览器不停的向服务器请求读数据的话,就象类似的FRAME里东西,要不停刷新。这样做出来的效果是极差劲的。
所以我考虑用SOCKET。
在聊天室的关键是:
发言的部分这儿socket一连上以后就close掉了,现在我发一条消息,服务器处理完,然后就close掉。
显示所有对话消息那个frame就有点特殊了,socket连上以后,服务器端取inputstream和outputstream(DELPHI里可能不这么叫,反正是STREAM),然后就保持,一直不close,有新消息出来就直接输出来了。
这样,只要不close,那就是一直连上的,服务器端有什么变化就直接print过来了,客户端也就有变化了。所以这就实现了无刷新技术的动态写到客户端的浏览器,而不是让用户感觉到窗口一直是在刷新的。
其实说白了就是从SERVER端把数据利用STREAM推到BROWER端。
思路基本是这样的,怎么来实现呢?
我用TCPSERVER,在ONACCEPT事件中弹出一个对话。例如:我监测我测试服务器(IP:12.2.2.2)的9000端口,当我在浏览器里加一个FRAME让他URL连接到http://12.2.2.2:9000 这个时候会激发SERVER里的事件并且弹出对话框,但是接下来会有错误提示,因为我没有加任何处理,所以SOCKET根本没有什么握手之类的操作,可是现在不允许有CLINET端,从C和JAVA来看都是肯定能完成这样的操作的,在DELPHI中怎么操作呢?记着,客户都是用溜览器的……我觉得必须要用SREAM从SERVER“推”到BROWER……
请大家踊跃发言,并且提供好的操作和方法,最好是具体怎么来实现。
欢迎讨论。