2013-03-21 61 views
4

是否可以允許兩個客戶端在沒有服務器的情況下直接交互?允許兩個客戶端在沒有服務器的情況下進行交互

我指的是網站,例如可以在客戶端只使用javascript的同一網站上的兩個客戶端之間創建聊天。

如果不是,在網站上的活動客戶端之間進行聊天工作的最低服務器端是什麼? (例如:一個PHP文件和沒有數據庫)?

我的想法: 存儲對話將每個客戶端上使用localStorage很容易做到,問題是如何從client1發送一些數據client2沒有在數據庫中存儲任何東西(或大多數消息)。另外,請注意,「過去」的對話應該不可見,所以不需要存儲。

請注意,我不想要任何nodeJS或websocket解決方案,我希望儘可能簡單。那麼,什麼是在線用戶之間進行聊天的最小codefiles

+1

是的。爲每個參與者提供其他參與者的電話號碼? ;-)雖然我對答案感興趣,但認真對待+1。 – Sepster 2013-03-21 15:19:46

+0

@JamieHutber我猜OP是問是否有可能在瀏覽器中用JavaScript設置一個監聽器(假設服務器會以某種方式告訴每個客戶端其他客戶端的細節,然後把它留給客戶端)。您的評論意味着這是不可能的。 – Sepster 2013-03-21 15:20:52

+0

它不能完成,因爲至少有一個客戶端每個都需要打開端口80來請求 - 這只是服務器所做的事情。即便如此,JavaScript也無法接受傳入的請求。 – Jodes 2013-03-21 15:23:00

回答

3

WebRTC API將允許JavaScript啓動直接的瀏覽器到瀏覽器的連接,但服務器仍然需要爲頁面提供服務並協調會話啓動。

這些API仍在迅速發展,只能在流血的瀏覽器中使用,因此尚未準備好用於實際生產。

然而—說實話—爲你想要做什麼,最簡單的選擇是節點和socket.io:

var http=require('http'), express=require('express'), sio = require('socket.io') 
    , app=express(), srv = http.createServer(app); 

app.use(express.static(__dirname+'/static')); 

sio.listen(srv); 
srv.listen(80); 

...現在你有5條線工作的WebSockets服務器。把你所有的客戶端的東西放在靜態文件夾中,你很好。

0

不,這是不可能的。如果您想要聊天框,則必須將數據存儲在服務器中。連接客戶端的東西,比如向每個客戶端顯示聊天文本和相同的東西,他們都來自服務器..所以這是不可能的。那麼,即使免費的聊天框也會將每個網站的數據放入服務器中。

至於你的想法使用localStorage,也許這是可能的(但仍然使用新的WebSocket協議),但它不能在時間維度工作,對吧?如果另一個用戶加入,他們將不會看到之前發送的內容。

+0

至少,我如何從客戶端A發送文本行到客戶端B,而不在服務器上存儲任何數據? – Cristy 2013-03-21 15:22:35

+0

我在我的問題中說過我不想要任何歷史,只是讓在線用戶互動。 – Cristy 2013-03-21 15:27:45

+0

好吧..我認爲WebSocket是現在最簡單的方法。 – aIKid 2013-03-21 15:38:55

0

HTML5得到了一個新的Web Sockets feature

有了這個服務器的干預幾乎是nullified..The服務器和客戶端通過新的協議進行通信

  • WS - 網絡套接字協議
  • WSS - 網頁套接字協議安全(類似於HTTPS)

Live demo

+0

我知道,但我想要一些最小的實現,它可以在任何服務器上工作,但主要是在服務器上使用'PHP'。 WebSockets很難爲PHP設置。 – Cristy 2013-03-21 15:27:09

+0

Web套接字仍然需要一臺服務器。它只是允許客戶端和服務器之間的持久連接。這與C2C無關。 – Jodes 2013-03-21 15:28:09

相關問題