在web应用程序中,我有一个嵌入在网页(.HTML)中的聊天小工具。我的应用程序Java的后端代码和聊天小工具与.PHP通信,我无法访问.PHP环境。
我只能用Java编写代码来处理使用java的HTML请求。
问题:当我在浏览器上单击“刷新”时,每次都会开始新的聊天会话。即使我从一个页面跳到另一个页面,聊天会话也会刷新,新的聊天也开始了。
我不应该在.PHP环境中做任何更改,但是需要更改Java中的代码。
问题:,我想用这样一种方式来建模程序:.PHP环境认为页面没有刷新,并且不会破坏会话。
我认为代理可能是解决方案,但如何实现这些呢?任何其他的解决办法。
发布于 2014-01-31 07:17:08
要构建代理,首先在小部件将与之交谈的端口上创建一个ServerSocket,然后在其上开始接受接受连接。
当新的连接出现时,创建到php服务器的新套接字。然后,您必须将输入从一个管道传输到另一个输出,反之亦然。
这是一个通用的代理。对于您的情况,您需要添加一些逻辑来检测已经存在的连接(可能是使用cookie),然后重用现有的套接字,而不是创建新的套接字。
不幸的是,解析输入并获得协议以匹配php正在做的操作还需要做一些工作。
(编辑以添加示例)
下面是一个简单的通用代理示例,可以让您开始工作。运行此命令,然后将浏览器指向本地主机。
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);
}
}
}一个可行的解决方案需要多线程(或异步),而不是只是在服务器之间传输数据,您必须进入其中并检查它,然后决定是否需要打开新的套接字或重用现有的套接字。
https://stackoverflow.com/questions/21474246
复制相似问题