请问各位高手一个问题:关于用php实现通讯

flydragon 2000-09-12 02:37:00
怎么样用php实现实时的通讯?
就是说比如在一个社区中注册用户甲发一段消息给注册用户乙,如果乙现在在线,只要登录了,就能弹出消息窗口,如果不在线,则下次登录的时候能自动弹出?
请做过此类东西的高手指点一二,不胜感激!!!
...全文
163 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
flydragon 2000-09-20
  • 打赏
  • 举报
回复
感谢各位,不过据说server push是ie不支持的
现在用得很少
我只好用了一种很笨,很耗资源的方式
定时刷新
哎]
没办法
flydragon 2000-09-14
  • 打赏
  • 举报
回复
那在局域网中的用户不能相互发了?客户端能用ServerSocket嘛?
flydragon 2000-09-13
  • 打赏
  • 举报
回复
那这样是不是每张页面都要放上一段程序了?要实现的是两个客户端的通讯阿
gzproger 2000-09-13
  • 打赏
  • 举报
回复
弹出消息,可以在客户端作一个java applet,启动一个socket监听;当服务器端需要
发消息给客户端时,用socket连上,发送就是了。
session失效,看你怎么具体做。原理是超时,如果一个家伙15分钟不动,
就认为他是掉线了。
gzproger 2000-09-13
  • 打赏
  • 举报
回复
首先声明,下面的办法没有考虑proxy和ip转换过的用户的情况;

最基本的要会写java applet,在applet里面用ServerSocket监听:
import java.net.*;
....
ServerSocket server:=new ServerSocket(...参数不太记得了..);
Socket s=null;
while (true)
{
s=server.accept();//阻塞等待连接请求;
processIt(s); //处理请求
}

在processIt方法里面执行一个接受消息和弹出窗口的操作;
这是客户端的基本原理;

服务器端
首先,用户登录时记录他的IP地址;
其次,一个用户发消息给另外一个用户时,取出目标用户的ip地址,然后创建socket连接,
把消息传过去;当然也要保存在数据库里面。


上述办法不能对付有防火强或者ip转换的情况;如果要能对方,客户端就不是启动监听,而是
和服务器建立socket连接:
import java.net.*;
import java.io.*;
.....
Socket s=new Socket(...参数还是忘记了);//和服务器建立连接;
InputStream = s.getInputStream();//类似php了
后面就是读这个stream了,好久不用java不大记得了;

不过这样做要小心,因为每个客户要和服务器有一个持续连接的。

也许有更好的办法。大家一块想想巴。

flydragon 2000-09-13
  • 打赏
  • 举报
回复
你好啊
首先谢谢你的积极帮助,但是我还是不知怎么实现.要是你实现过的话能将代码email给我吗?我的add:chenjielei@yeah.net,非常感谢100点,怎么样?要是没有的话,能说得再详细点吗?
flydragon 2000-09-13
  • 打赏
  • 举报
回复
我现在就是要不刷新就弹出窗口的
你上过www.the9.com吗?那上面的消息就是实时弹出的,不论你在它的那张页面上。
还有一个你可以看看www.playease.com中的千里传音也是有消息马上弹出
还有个问题:关于session失效的问题,鉴于http的无状态,在用户不正常退出的时候怎么从在线名单中删除此用户,做在线统计的时候,统计相对准确的在线人数,你做过社区,这个你应该是妹什么问题吧
gzproger 2000-09-13
  • 打赏
  • 举报
回复
是一个对java applet的引用代码;类似于每页都放一个java script或者meta的自动刷新那样;
你可以写一个msgreceiver.php,然后每页都require("msgreceiver.php");

当一个客户发消息时,服务器帮他转发给另外的客户;
如果希望直接通过tcp/ip在两个客户端直接通讯,通过web应该做不到。除非你要求用户降低
客户端的浏览器的安全设置。
shiyee 2000-09-12
  • 打赏
  • 举报
回复
To flydragon
这个好实现!我做社区做过。建张表,叫消息表,每个用户登进去,做次检查就是了。
浏览器客户端的失时通讯不知道怎么实现?c/s的client端可以用时间间隔控制事件来实现失时
检查事件,而浏览器怎么做?能实现吗?不要那个refresh content=10,在Chinaren上的消息
<a href="http://message.chinaren.com/read.php3"><img src="http://message.chinaren.com/checkmsg.php3" width=60 height=12 border=0></a>
也不能做到实时检查,只有每次登陆或刷新才能检测新消息。

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧