2014-01-31 55 views
0

在Web應用程序中,我在網頁(.HTML)中嵌入了聊天小工具。我的應用程序Java和聊天小工具的後端代碼與.PHP進行通信。我無法訪問.PHP環境。Java/PHP - 聊天會話在窗口刷新或在應用程序中打開新窗口刷新或打開新窗口

我只能用java編碼來處理使用Java的HTML請求。

期: 當我點擊瀏覽器刷新時,每次都會開始新的聊天會話。 即使當我從一個頁面跳到另一個頁面時,聊天會話刷新並開始新的聊天。

我不認爲這樣做在.PHP環境中的任何改變,但需要在Java代碼更改

問題: 我想以這樣的方式來塑造程序.PHP環境 認爲頁面有沒有刷新,並沒有打破會議。

我認爲代理可能是解決方案,但如何實現這些?任何其他解決方案相同。

+0

我認爲你是對的。代理可能適合你。給它一個鏡頭,並在這裏發佈你的代碼,如果你有問題。 –

+0

您是否有任何包含Java代理實現的鏈接?我沒有得到直接的鏈接或可能是關鍵字不正確使用。謝謝 – fatherazrael

+0

我會用一些代理信息添加一個答案 –

回答

1

要構建代理,首先在小部件將與之通信的端口上創建一個ServerSocket,然後開始接受它的接受連接。

隨着新的連接進來,創建一個新的Socket到PHP服務器。然後你必須將輸入從一個輸入到另一個的輸出,反之亦然。

這是一個通用的代理。對於您的情況,您必須添加一些邏輯來檢測連接是否已經存在(可能使用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); 
    } 
} 
} 

的工作解決方案將需要多線程(或異步)和,而不是僅僅通過管道的服務器之間的數據,你必須在那裏得到和檢查,然後決定是否需要打開一個新的套接字或重新使用現有的。

+0

謝謝你,我會遵循這一點,並會與你分享進展。還有一件事,Will能否讓我在新的頁面上保存聊天小工具的歷史記錄?就像用戶已經聊天了一樣,我希望刷新後的新頁面上已經有聊天內容了,或者您認爲我還需要PHP代碼來看待嗎? – fatherazrael

+0

這實際上取決於小工具的寫法。如果它允許你發送以前的消息(也許它會認爲它們是新的),那麼你可以在代理上保留一段歷史。 - 順便說一句,這是很多工作。既然你已經有了一個Java服務器可以使用,你可能需要考慮一些現成的聊天客戶端,然後再攻擊這個客戶端。我想這取決於你的情況和雄心壯志。 –