在网络应用程序中,我在网页(.HTML)中嵌入了一个聊天小工具。我的应用程序Java的后端代码和聊天小工具与.PHP进行通信。我无法访问.PHP环境。
我只能用java编写代码来处理使用Java的HTML请求。
问题: 当我在浏览器上单击刷新时,每次都会开始新的聊天会话。 即使我从一个页面跳到另一个页面,聊天会话也会刷新并开始新的聊天。
我不想在.PHP环境中进行任何更改,但需要在Java中更改代码
问题: 我想以.PHP环境的方式模拟程序 认为该页面尚未刷新并且不会中断会话。
我认为代理可能是解决方案,但如何实现?任何其他解决方案。
答案 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);
}
}
}
一个有效的工作解决方案需要多线程(或异步),而不是仅仅在服务器之间管理数据,你必须进入并检查它,然后决定是否需要打开一个新的套接字或重新使用现有的。