2014-12-19 64 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]