使用JavaScript的即时消息系统
我有一个学校项目,我需要创建一个即时网络信息系统 为了完成这项任务,我研究了PHP套接字 从这些我开始看到一个模式。正如您所知,PHP只能运行一次(从上到下),从这些示例中,我可以看到while循环是使套接字侦听新连接的原因。(意味着使用JavaScript的即时消息系统,javascript,php,ajax,sockets,Javascript,Php,Ajax,Sockets,我有一个学校项目,我需要创建一个即时网络信息系统 为了完成这项任务,我研究了PHP套接字 从这些我开始看到一个模式。正如您所知,PHP只能运行一次(从上到下),从这些示例中,我可以看到while循环是使套接字侦听新连接的原因。(意味着php脚本永不停止)这些示例将响应套接字的输出 据我所知,这是伟大的,如果你只是想一个简单的网站 但事实并非如此。我想使用JavaScript构建这个应用程序,以“询问”套接字是否有任何新消息,然后相应地呈现消息 因为我对PHP套接字非常陌生,所以我不确定这是否应该
php脚本
永不停止)这些示例将响应套接字的输出
据我所知,这是伟大的,如果你只是想一个简单的网站
但事实并非如此。我想使用JavaScript构建这个应用程序,以“询问”套接字是否有任何新消息,然后相应地呈现消息
因为我对PHP套接字非常陌生,所以我不确定这是否应该完全由PHP完成,或者是否可以使用JavaScript来监听套接字(通过Ajax),然后将输出打印为
JSON
?我建议您使用第三方库(好吧,再次向您推荐此库:)。阅读其教程,您将更清楚地了解如何使用WebSocket协议在浏览器和服务器之间进行通信
服务器完全可以用纯PHP实现 通常,对于基于推送的通知,您需要的协议(仅适用于较新的浏览器)是WebSocket 有多种图书馆和服务可以为您做到这一点: Pusher是一项在线服务,可以与多种语言集成,为您提供实时功能 仅在JavaScript中,如果您有节点,则应查看socket.io:
在.NET领域,有一个signar,它非常棒不仅可以使用PHP,还可以使用它。Throuway是用于Websocket传输的PHP客户端/路由器。WAMP通过WebSocket为您提供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);
我实际上使用了一个基于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服务器将数据发送回相应的用户
我扩展了在上找到的此Web服务器
通过bat文件运行Web服务器
@ECHO关闭
回显启动Web服务器
使用[dir to php dir]\php\php.exe进行回显
@回音
启动“WEBSOCKET”/wait/B“[dir to php dir]\php\v5.6\php.exe”-f[WEBSOCKET.php的路径]
尽管下面提到了它,而且它不使用PHP,但这可能与您想要的非常接近:请看:您能否与angular wamp分享您提到的简单聊天示例?