首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java/PHP -聊天会话在窗口刷新或在应用程序中打开新窗口时得到刷新

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

Stack Overflow用户
提问于 2014-01-31 07:01:01
回答 1查看 221关注 0票数 0

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

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

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

我不应该在.PHP环境中做任何更改,但是需要更改Java中的代码。

问题:,我想用这样一种方式来建模程序:.PHP环境认为页面没有刷新,并且不会破坏会话。

我认为代理可能是解决方案,但如何实现这些呢?任何其他的解决办法。

EN

回答 1

Stack Overflow用户

发布于 2014-01-31 07:17:08

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

当新的连接出现时,创建到php服务器的新套接字。然后,您必须将输入从一个管道传输到另一个输出,反之亦然。

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

不幸的是,解析输入并获得协议以匹配php正在做的操作还需要做一些工作。

(编辑以添加示例)

下面是一个简单的通用代理示例,可以让您开始工作。运行此命令,然后将浏览器指向本地主机。

代码语言:javascript
复制
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);
    }
}
}

一个可行的解决方案需要多线程(或异步),而不是只是在服务器之间传输数据,您必须进入其中并检查它,然后决定是否需要打开新的套接字或重用现有的套接字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21474246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档