使用PHP与Socket.io

Yuv*_*uvi 118 php socket.io

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

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

Flo*_*ine 98

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

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

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

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


kas*_*ans 69

如果你想与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`';
Run Code Online (Sandbox Code Playgroud)

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);
  });
});
Run Code Online (Sandbox Code Playgroud)

  • 我见过这个,但有一件事困扰我.这不是让PHP实现一个sockets.io服务器的重点吗?而且,Elepant.io似乎是一个sockets.io客户端的PHP实现,你可以连接到其他一些sockets.io服务器(意思是,elephant.io没有监听来自你的sockets.io客户端的连接,连接给他们并为他们服务)? (17认同)
  • 大家好.Elephant.io的目的只是将事件从PHP发送到socket.io服务器.不要打开持久的联系.但是能够快速连接并发送事件/消息.我们在生产中使用它,它就像一个魅力. (8认同)
  • 这个库不再维护,对我们来说有一些问题 (3认同)
  • 我会在这里给你+1,但看起来这仍然是在生产环境中使用的一些方法. (2认同)

Alv*_* K. 20

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


小智 14

如果你真的想使用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);
  });
});
Run Code Online (Sandbox Code Playgroud)


小智 7

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

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

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

希望这可以帮助!


Pau*_*ulM 6

呃,你为什么要这样?将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();  
Run Code Online (Sandbox Code Playgroud)

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

  • 因为我们中的一些人只能得到一个便宜的主机,只会让你使用php和mysql. (31认同)
  • 因为我们中的一些人必须使用依赖于PHP的现有框架.例如,我们开发和销售PHP脚本,但是想通过使用websockets来改进IM,我们不想编写socket.io已经实现的所有后备,但是我们不能要求客户使用NodeJS. (31认同)
  • 对于<$ 10 VPS提供商,到目前为止我发现的唯一一个体面的是digitalocean.com.但那个很不错. (4认同)
  • @PaulM:我尝试了几个<$ 10 VPS提供商,所有这些都非常糟糕.每个都非常慢*,当某些东西被打破,支持是可怕的等等.另一方面,在芬兰,通过adsl订阅获得不错的优质网络托管(但仅限于php/mysql /静态文件)并不罕见任何额外的.所以不,能够以5美元购买糟糕的VPS肯定不是解决方案. (3认同)
  • 我不同意.我认为这样的答案是非常相关的.有人告诉你"你使用它错了"可能比帮助你使用它错误的人更有价值. (3认同)
  • -1为错误答案。没有解决这个问题。 (2认同)

小智 5

我认识奋斗的人!但是我最近几乎与Workerman一起工​​作。如果您还没有偶然发现过这个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

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

这是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();
Run Code Online (Sandbox Code Playgroud)

这是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>
Run Code Online (Sandbox Code Playgroud)

再次打开命令行或git bash或将server.php文件放入其中的终端。因此,在我们的例子中,这是C:/ xampp / htdocs / websocket /并输入php server.php启动并按Enter。

然后转到浏览器并键入http://localhost/websocket/client.php来访问您的站点。然后,在该文本框中键入任何内容,您将在旅途中看到基本的php websocket!

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