2014-12-19 153 views
0

我有一個學校項目,我需要創建一個即時的基於web的消息系統。使用JavaScript的即時消息系統

伊夫看着PHP套接字來完成這個任務PHP socket manual

從開始看到一個模式,這些IM。正如你所知道的PHP只能運行一次(從上到下),從這些例子中我可以看到while循環是什麼使得套接字監聽新的連接。 (這意味着php script永不停止)這些示例回顯套接字的輸出。

據我所見,如果你只是想要一個普通的網站,這是很好的。

但事實並非如此。我想要使​​用JavaScript構建這個應用程序來「詢問」套接字是否有任何新消息,以及是否存在相應的消息。

因爲即時通訊非常新的PHP套接字我不知道這應該完全由PHP完成,或者如果它可以使用JavaScript來聽取套接字(通過Ajax),然後打印輸出爲JSON

+0

雖然它的下面提及的,它不使用PHP,這可能是非常接近你在找什麼:http://socket.io/get-started/chat/ – Michael 2014-12-19 11:13:47

+0

參見:[Androidhive教程](http://www.androidhive.info/2014/10/android-building-group-chat-app-using-sockets-part-1/) – kenorb 2015-06-01 23:31:33

回答

0

我建議你使用第三方庫(好吧,再推薦一下這個庫:cboden/ratchet)。閱讀它的教程,您將更清楚地瞭解如何使用協議在瀏覽器和服務器之間進行通信。

服務器絕對能夠用純PHP實現!

0

通常,對於基於推送的通知,您需要的協議(只適用於較新的瀏覽器)是WebSockets。

有各種庫和服務的,可以爲你做這個:

推,是一個在線服務,可以用不同的語言給你實時功能集成。 https://pusher.com/

在JavaScript中唯一的,如果你有節點你應該看看socket.io:http://socket.io/

在.NET中的土地,有SignalR這太棒http://signalr.net/

0

它不僅是可以做到的與PHP,但它也微不足道Thruway。高速公路是一個WAMPv2 PHP客戶端/路由器,它使用Ratchet作爲Websocket傳輸。 WAMP通過WebSockets爲您提供Sub/Pub和RPC。

你需要創建一個簡單的php路由器,並從命令行啓動它。事情是這樣的:

<?php 
require 'vendor\autoload.php'; 
use Thruway\Peer\Router; 
use Thruway\Transport\RatchetTransportProvider; 

$router = new Router(); 
$transportProvider = new RatchetTransportProvider("127.0.0.1", 9090); 
$router->addTransportProvider($transportProvider); 

然後在客戶端上,使用AutobahnJS或者,如果你使用的角度,你可以使用angular-wamp

如果您仍然有問題,我會處理一個簡單的聊天示例。

+0

可以請你分享一下你提到的簡單的聊天例子嗎? ? – 2015-10-07 02:42:49

0

我實際上使用了一個基於PHP的websocket並對其進行了修改。如果你願意,我可以雙向工作。您可以將發送到websocket的消息存儲在數組中,甚至可以將它們保存到數據庫中。這段代碼

看:客戶可以要求新郵件

function createConnectionToWebSocket(connection) 
    { 
     var host = "ws://[ip of server]:9000/echobot"; // SET THIS TO YOUR SERVER --> 9000 is the port used by websockets. 
     try { 
       socket = new WebSocket(host); 
       console.log('WebSocket - status '+socket.readyState); 
       socket.onopen = function(msg) { 
             console.log("Welcome - status "+this.readyState); 

            }; 
       socket.onmessage = function(msg) { 
             messageHandlerSocket(msg.data); 
            }; 
       socket.onclose = function(msg) { 
             console.log("Disconnected - status "+this.readyState); 
             if (msg && !msg.wasClean && msg.code == 1006) 
             { 

             } 
            }; 
       socket.onerror = function(msg) { 

            };      
      } 
      catch(ex){ 
       console.log(ex); 
      } 


    } 

    function messageHandlerSocket(msg) 
    { 
     //all messages will be send in JSON 
     var msg = JSON.parse(msg) 
     //received JSON and check the type. Type is message 
     switch (msg.type) 
     { 
      case "messages" : 
       //code when the webserver sends back the messages.          

      break; 
     } 
    } 


    socket.send(JSON.stringify({"type" : "retrievemessages", "user" : user.id})); 

Socket.send允許您將數據發送到PHP服務器。我發送JSON並在服務器上解析它。基於type參數,我讓PHP服務器將數據發送回相應的用戶。

我對Github發現的這個網絡服務器進行了擴展。

通過bat-file運行網絡服務器。

@ECHO OFF 
ECHO STARTING WEBSERVER 
ECHO USING [dir to php dir]\php\php.exe 
@ECHO OFF 

START "WEBSOCKET" /wait /B "[dir to php dir]\php\v5.6\php.exe" -f [path to your websocket.php]