我想编写一个聊天的服务器程序。我的思路是这样的。请注意:没有具体的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……请大家踊跃发言,并且提供好的操作和方法,最好是具体怎么来实现。欢迎讨论。
模式是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……请大家踊跃发言,并且提供好的操作和方法,最好是具体怎么来实现。欢迎讨论。
解决方案 »
- 数据库select 问题,急
- DLL调用问题.出现"DLL为无效的WINDOWS映象.请再检测一遍您的安装盘"提示.
- 如何向串口写十六进制
- 设计操作员菜单权限的基本设计思想怎么样?
- Tedit控件对ESC 和 ENTER按健没有反应
- 如何在delphi中实现windows中net send 发送消息的功能!
- DBGRID的实时更新!
- 急急急!请问大侠们一个关于ping操作的问题,thanks!
- 三层结构中查询数据的问题
- 如何用条形码扫描器与Delphi编程
- 短信群发催缴电费
- 在delphi中调用VC生成的DLL的问题:VC中的float, double, Integer,及函数指针在Delphi中各自对应什么?
看清楚再说呐~~~~~~是STREAM的问题
如果使用DELPHI来开发的话,就必须在使用之前先安装该控件,这样好象不太好。
它是支持'推'模式的,也就是在连接中服务端主动通知客户端.事实上,很多现在用的聊天室就是用了它.然后说到客户端,
所谓无CLIENT? 就是用IE作客户端?这方面总需要考虑的.
DELPHI自带的TServerSocket,TIDHttp,TIDTCPServer,TTCPServer
任一个都可以用吧.
也就是利用meta-refresh语句。
但是服务器的负担会小很多。