繁体   English   中英

使用 PHP 和 Socket.io

[英]Using PHP with Socket.io

是否可以在客户端使用 Sockets.io 并与服务器上基于 PHP 的应用程序通信? PHP 是否支持这种“长连接”的代码编写方式?

我为 socket.io 找到的所有示例代码似乎都是服务器端的 node.js,所以没有帮助。

要回答这个问题可能有点晚了,但这是我发现的。

我不想辩论节点是否比php更好,这不是重点。

解决方案是:我没有找到任何针对PHP的socket.io实现。

但是有一些方法可以实现WebSockets 这个jQuery插件允许您使用Websockets,同时优雅地降级非支持浏览器。 在PHP方面, 这个类似乎是PHP WS服务器中使用最广泛的

如果你想与socket一起使用socket.io这可能是你的答案!

项目网站:

elephant.io

他们也在github上:

https://github.com/wisembly/elephant.io

Elephant.io提供了一个完全用PHP编写的socket.io客户端,它应该可以在项目的任何地方使用。

它是一个轻松易用的库,旨在通过socket.io和websockets为PHP应用程序带来一些实时功能,以便在完整的javascript中无法完成。

项目网站的例子(通过php与websocket服务器通信)

php服务器

use ElephantIO\Client as Elephant;

$elephant = new Elephant('http://localhost:8000', 'socket.io', 1, false, true, true);

$elephant->init();
$elephant->send(
    ElephantIOClient::TYPE_EVENT,
    null,
    null,
    json_encode(array('name' => 'foo', 'args' => 'bar'))
);
$elephant->close();

echo 'tryin to send `bar` to the event `foo`';

socket io服务器

var io = require('socket.io').listen(8000);

io.sockets.on('connection', function (socket) {
  console.log('user connected!');

  socket.on('foo', function (data) {
    console.log('here we are in action event and data is: ' + data);
  });
});

更新:2014年8月当前的socket.io v1.0站点有一个PHP示例: - https://github.com/rase-/socket.io-php-emitter

如果你真的想使用PHP作为socket.io的后端,这就是我找到的。 两个socket.io php服务器端替代。

https://github.com/walkor/phpsocket.io

https://github.com/RickySu/phpsocket.io

像这样的第一个存储库的例子代码。

use PHPSocketIO\SocketIO;

// listen port 2021 for socket.io client
$io = new SocketIO(2021);
$io->on('connection', function($socket)use($io){
  $socket->on('chat message', function($msg)use($io){
    $io->emit('chat message', $msg);
  });
});

对于你提到的“长期连接”,你可以使用Ratchet for PHP。 它是一个基于Stream Socket函数构建的库,PHP从PHP 5开始就支持这些函数。

对于客户端,您需要使用HTML5支持的WebSocket而不是Socket.io(因为您知道,socket.io仅适用于node.js)。

如果您仍想使用Socket.io,您可以尝试这种方式: - 查找并获取socket.io.js供客户端使用 - 使用Ratchet模拟socket.io在服务器上的方式

希望这可以帮助!

呃,你为什么要这样? 将PHP留在后端,NodeJS / Sockets执行非阻塞操作。

以下是帮助您入门的内容: http//groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc

就个人而言,我已经表达了一个端点,它正在聆听来自PHP的交互。

例如,如果我向用户发送了一封电子邮件,我希望socket.io向用户显示实时通知。

想要从socket.io到php的交互,你可以做这样的事情:

var http = require('http'),
            host = WWW_HOST,
            clen = 'userid=' + userid,
            site = http.createClient(80, host),
            request = site.request("POST", "/modules/nodeim/includes/signonuser.inc.php",  
                {'host':host,'Content-Length':clen.length,'Content-Type':'application/x-www-form-urlencoded'});                     

request.write('userid=' + userid);      
request.end();  

说真的,PHP非常适合做服务器端的东西,让它与现在在这个域中没有位置的连接一起使用。 当你有websockets或flashsockets时,为什么要进行长轮询。

我知道斗争的人! 但是我最近和工人一起工作了。 如果你没有偶然发现这个php框架,那么你最好检查一下!

好吧,Workerman是一个异步事件驱动的PHP框架,可以轻松构建快速,可扩展的网络应用程序。 (我只是从他们的网站复制并粘贴了hahahah http://www.workerman.net/en/

解释这一点的简单方法是,当它来到Web套接字编程时,您真正需要的是在服务器或本地服务器中拥有2个文件(无论您在哪里工作)。

  1. server.php (将响应所有客户端请求的源代码)

  2. client.php / client.html (将执行请求的东西的源代码)

所以基本上,你首先在server.php上修改代码并启动服务器。 通常,因为我使用的Windows增加了更多的斗争,我通过这个命令运行服务器 - > php server.php start

好吧,如果你使用xampp。 这是一种方法。 转到您要放置文件的位置。 在我们的例子中,我们将把文件放入

C:/xampp/htdocs/websocket/server.php

C:/xampp/htdocs/websocket/client.php或client.html

假设您已在本地服务器中拥有这些文件。 打开您的Git Bash或命令行或终端或您使用的任何一个,并在这里下载PHP库。

https://github.com/walkor/Workerman

https://github.com/walkor/phpsocket.io

我通常通过composer下载它,并在我的php脚本中自动加载这些文件。

并检查这一个。 这非常重要 您需要此javascript库,以便client.php或client.html在运行时与server.php进行通信。

https://github.com/walkor/phpsocket.io/tree/master/examples/chat/public/socket.io-client

我只是复制并粘贴了与我的server.php和client.php相同级别的socket.io-client文件夹

这是server.php源代码

<?php
require __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;
use PHPSocketIO\SocketIO;

// listen port 2021 for socket.io client
$io = new SocketIO(2021);
$io->on('connection', function($socket)use($io){
    $socket->on('send message', function($msg)use($io){
        $io->emit('new message', $msg);
    });
});

Worker::runAll();

这是client.phpclient.html源代码

<!DOCTYPE html>
<html>
    <head>
        <title>Chat</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">        
    </head>
    <body>
        <div id="chat-messages" style="overflow-y: scroll; height: 100px; "></div>        
        <input type="text" class="message">
    </body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>    
    <script src="socket.io-client/socket.io.js"></script>  
    <script>
            var socket = io.connect("ws://127.0.0.1:2021");

            $('.message').on('change', function(){
                socket.emit('send message', $(this).val());
                $(this).val('');
            });

            socket.on('new message', function(data){
                $('#chat-messages').append('<p>' + data +'</p>');
            });
    </script>
</html>

再一次,打开你的server.php文件的命令行或git bash或终端。 所以在我们的例子中,就是C:/ xampp / htdocs / websocket /并在php server.php中输入并按回车键。

然后转到您的浏览器并键入http://localhost/websocket/client.php以访问您的站点。 然后只需在该文本框中输入任何内容,您就会看到一个基本的php websocket!

你只需要记住。 在Web套接字编程中,它只需要一个服务器和一个客户端。 首先运行服务器代码,然后打开客户端代码。 你有它! 希望这可以帮助!

这个怎么样 ? PHPSocketio ?? 它是socket.io php服务器端的替代品。 事件循环基于pecl事件扩展。 虽然到现在为止还没有尝试过。

我还没有尝试过,但你应该可以用ReactPHP和这个套接字组件来做到这一点。 看起来就像Node,但在PHP中。

我们现在在2018年和hoola,有一种方法在php上实现WS和WAMPServer。 它被称为棘轮

我正在寻找一种非常简单的方法来让PHP向客户端发送socket.io消息。

这不需要任何额外的PHP库 - 它只使用套接字。

不要像许多其他解决方案那样尝试连接到websocket接口,只需连接到node.js服务器并使用.on('data')来接收消息。

然后, socket.io可以将它转发给客户端。

在Node.js中检测来自PHP服务器的连接,如下所示:

//You might have something like this - just included to show object setup
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);

server.on("connection", function(s) {
    //If connection is from our server (localhost)
    if(s.remoteAddress == "::ffff:127.0.0.1") {
        s.on('data', function(buf) {
            var js = JSON.parse(buf);
            io.emit(js.msg,js.data); //Send the msg to socket.io clients
        });
    }
});

这是一个非常简单的PHP代码 - 我把它包装在一个函数中 - 你可能会想出更好的东西。

请注意, 8080是我的Node.js服务器的端口 - 您可能想要更改。

function sio_message($message, $data) {
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    $result = socket_connect($socket, '127.0.0.1', 8080);
    if(!$result) {
        die('cannot connect '.socket_strerror(socket_last_error()).PHP_EOL);
    }
    $bytes = socket_write($socket, json_encode(Array("msg" => $message, "data" => $data)));
    socket_close($socket);
}

你可以像这样使用它:

sio_message("chat message","Hello from PHP!");

您还可以发送转换为json并传递给客户端的数组。

sio_message("DataUpdate",Array("Data1" => "something", "Data2" => "something else"));

这是“信任”客户端从服务器获取合法消息的有用方法。

您还可以让PHP传递数据库更新,而无需数百个客户端查询数据库。

我希望我能早点找到这个 - 希望这有帮助! 😉

在这个库中查看php http://phptrends.com/category/70 或者使用php http://www.php.net/manual/en/book.sockets.php中的原生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM