Java / PHP - 聊天会话在窗口刷新时刷新或在应用程序中打开新窗口

时间:2014-01-31 07:01:01

标签: java php session

在网络应用程序中,我在网页(.HTML)中嵌入了一个聊天小工具。我的应用程序Java的后端代码和聊天小工具与.PHP进行通信。我无法访问.PHP环境。

我只能用java编写代码来处理使用Java的HTML请求。

问题: 当我在浏览器上单击刷新时,每次都会开始新的聊天会话。 即使我从一个页面跳到另一个页面,聊天会话也会刷新并开始新的聊天。

我不想在.PHP环境中进行任何更改,但需要在Java中更改代码

问题: 我想以.PHP环境的方式模拟程序 认为该页面尚未刷新并且不会中断会话。

我认为代理可能是解决方案,但如何实现?任何其他解决方案。

1 个答案:

答案 0 :(得分:1)

要构建代理,首先在小部件将与之通信的端口上创建ServerSocket,然后开始接受接受连接。

当新连接进入时,为php服务器创建一个新的Socket。然后你必须将输入从一个传输到另一个的输出,反之亦然。

这是一个通用代理。对于您的情况,您必须添加一些逻辑来检测连接是否已存在(可能是cookie),然后重用现有的套接字而不是创建新的。

不幸的是,解析输入并使协议与php正在进行的操作相匹配将会有点麻烦。

(编辑以添加示例)

这是一个让您入门的准系统通用代理示例。运行此命令,然后将浏览器指向localhost。

public class Proxy {
public static void main(String args[]) throws Exception {
    ServerSocket server = new ServerSocket(80);
    Socket browser = server.accept();
    Socket remote = new Socket("google.com", 80);
    pipe(browser.getInputStream(), remote.getOutputStream());
    pipe(remote.getInputStream(), browser.getOutputStream());
    remote.close();
    server.close();
}

private static void pipe(InputStream in, OutputStream out) throws IOException {
    while(in.available() == 0) {
        Thread.yield();
    }
    while(in.available() > 0) {
        int data = in.read();
        System.out.write(data);
        out.write(data);
    }
}
}

一个有效的工作解决方案需要多线程(或异步),而不是仅仅在服务器之间管理数据,你必须进入并检查它,然后决定是否需要打开一个新的套接字或重新使用现有的。